使用Node从句子中提取重要单词

Vay*_*aya 5 nlp node.js

我承认我没有在SO数据库中进行过广泛的搜索.我尝试阅读自然的npm包,但似乎没有提供该功能.我想知道以下要求是否有可能?

我有一个数据库,列出了一个国家的所有城市.我也有这些城市的评级(最好的居住地,最差的居住地,最好的城市,更受好评的城市等).现在从用户界面,我想让用户输入自由文本,从那里我应该能够搜索我的数据库.

例如,住在加利福尼亚州或加利福尼亚州附近或加利福尼亚州的最佳居住地

从上面的句子中,我只想提取名词(可能是),因为这将是我可以搜索的城市或国家的名称.

然后提取'最佳'意味着我可以排序是一个特定的订单等...

有什么建议或指示吗?

我冒险将这个问题标记为"有争议的".但我发布的原因是为了获得一些指导.

Mar*_*eck 9

[我在寻找一些用例来测试我正在研究的模块时遇到了这个问题.显然这个问题有点老了,但是由于我的模块解决了这个问题,我想我也可以在这里为未来的搜索者添加一些信息.

你应该能够用POS chunker做你想做的事.我最近发布了一个用于Node的模型,该模型是由NLTK(Python)和Standford NLP(Java)库(这些chunk()TokensRegex()方法,分别是)提供的.

该模块处理已包含词性的字符串,因此首先您需要通过词性标注器运行文本,例如pos:

var pos = require('pos');

var words = new pos.Lexer().lex('Best place to live in California');
var tags = new pos.Tagger()
  .tag(words)
  .map(function(tag){return tag[0] + '/' + tag[1];})
  .join(' ');
Run Code Online (Sandbox Code Playgroud)

这会给你:

Best/JJS place/NN to/TO live/VB in/IN California/NNP ./.
Run Code Online (Sandbox Code Playgroud)

现在你可以使用pos-chunker找到所有合适的名词:

var chunker = require('pos-chunker');

var places = chunker.chunk(tags, '[{ tag: NNP }]');
Run Code Online (Sandbox Code Playgroud)

这会给你:

Best/JJS place/NN to/TO live/VB in/IN {California/NNP} ./.
Run Code Online (Sandbox Code Playgroud)

同样地,你可以提取动词来理解人们想要做什么('现场','游泳','吃'等):

var verbs = chunker.chunk(tags, '[{ tag: VB }]');
Run Code Online (Sandbox Code Playgroud)

哪个会产生:

Best/JJS place/NN to/TO {live/VB} in/IN California/NNP ./.
Run Code Online (Sandbox Code Playgroud)

您还可以匹配单词,单词和标签序列,使用前瞻,将序列组合在一起以创建块(然后匹配这些块)以及其他类似的东西.