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



我承认我还没有在SO数据库中进行广泛搜索。我尝试阅读天然NPM软件包,但似乎没有提供该功能。我想知道以下要求是否有可能?

我有一个数据库,其中包含一个国家的所有城市列表。我还拥有这些城市的评级(最佳居住地,最糟糕的生活地点,评分最佳的城市,Worsrt等级的城市等)。现在,从用户界面中,我想使用户输入免费文本,从那里我应该能够搜索我的数据库。

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

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

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

是否有任何建议或指示?

我有机会将问题标记为"应有争议"。但是我发布的原因是要继续前进。

[我遇到了这个问题,同时寻找一些用例来测试我正在处理的模块。显然,问题有些古老,但是由于我的模块解决了我认为我不妨在此处添加一些信息以供将来的搜索者添加的问题。]

您应该能够使用POS块制品来完成您想做的事情。我最近发布了一个针对NLTK(Python)和Standford NLP(Java)库(chunk()TokensRegex()方法,reactectectionally for asectectionally for sectectionally for nltk)建模的节点。

模块处理已经包含词性部分的字符串,因此首先您需要通过言论的axech tagger来运行文本,例如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(' ');

这将为您提供:

Best/JJS place/NN to/TO live/VB in/IN California/NNP ./.

现在,您可以使用POS-chunker查找所有适当名词:

var chunker = require('pos-chunker');
var places = chunker.chunk(tags, '[{ tag: NNP }]');

这将为您提供:

Best/JJS place/NN to/TO live/VB in/IN {California/NNP} ./.

类似地,您可以提取动词以了解人们想做的事情('Live','游泳','eat'等):

var verbs = chunker.chunk(tags, '[{ tag: VB }]');

哪个会产生:

Best/JJS place/NN to/TO {live/VB} in/IN California/NNP ./.

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

您可能不必确定什么是名词。由于您已经有系统可以处理的城市和国家名称列表,因此您只需要检查用户输入是否包含以下名称之一。

首先,您需要找到一种识别名词的方法。没有核心节点模块或任何可以为您完成的。您需要循环浏览字符串中的所有单词,然后将它们与某些字典数据库进行比较,以便您可以找到每个单词并检查它是否是名词。

我发现这个API看起来很有希望。您可以查询API的单词,并给您带来这样的数据斑点:

<?xml version="1.0" encoding="UTF-8"?>
<results>
    <result>
        <term>consistent, uniform</term>
        <definition>the same throughout in structure or composition</definition>
        <partofspeech>adj</partofspeech>
        <example>bituminous coal is often treated as a consistent and homogeneous product</example>
    </result>
</results>

您可以看到它包括一个partofspeech成员,该成员告诉您"一致"一词是形容词。


如果您对存储的文本有控制权,则另一个选项是使用某种标记语言来识别字符串的重要部分 保存它。像bbcode一样。我什至找到了一个可以帮助您执行此操作的BBCode节点模块。

然后,您可以这样将字符串保存到数据库中:

最佳住在加利福尼亚州的最佳地点或[City] California [/City]或[City] California [/city]的地方。

我的名字是[first] Alex [/first] [last] ford [/last]。

如果您要允许用户的整个文本句子类型,然后您试图弄清楚应该在应用程序中使用的这些句子的哪些部分,那么您将使事情变得非常困难。您应该要求他们将重要的数据输入到自己的文本框中,或者应该给用户一种格式化语言,例如上述bbcode语法,以便他们可以为您识别重要的位置。我认为,找出字符串的哪些部分很重要的工作对您来说是一个巨大的部分。

最新更新