Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用节点从句子中提取重要单词_Node.js_Nlp - Fatal编程技术网

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

Node.js 使用节点从句子中提取重要单词,node.js,nlp,Node.js,Nlp,我承认我没有在SO数据库中广泛搜索。我试着阅读natural npm软件包,但似乎没有提供该功能。我想知道以下要求是否可行 我有一个数据库,其中列出了一个国家的所有城市。我还对这些城市进行了评级(最佳居住地点、最差居住地点、最佳评级城市、最差评级城市等)。现在从用户界面,我想让用户输入自由文本,从那里我应该能够搜索我的数据库 例如,加利福尼亚州最适合居住的地方 或者加利福尼亚附近的地方 或者加利福尼亚的一些地方 从上面的句子中,我只想提取名词(可能是),因为这将是我可以搜索的城市或国家的名称 然

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

我有一个数据库,其中列出了一个国家的所有城市。我还对这些城市进行了评级(最佳居住地点、最差居住地点、最佳评级城市、最差评级城市等)。现在从用户界面,我想让用户输入自由文本,从那里我应该能够搜索我的数据库

例如,加利福尼亚州最适合居住的地方 或者加利福尼亚附近的地方 或者加利福尼亚的一些地方

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

然后提取“最佳”表示我可以排序的是特定的顺序等

有什么建议或方向可以找吗


我冒着这个问题被标记为“有争议”的风险。但是我发布的原因是为了得到一些前进的方向

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

我发现这看起来很有希望。您在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>

一致的,一致的
在结构或组成上完全相同
形容词
烟煤通常被视为一种一致且均质的产品
您可以看到它包含一个
部分speech
成员,它告诉您单词“consistent”是一个形容词


如果您可以控制存储的文本,另一个(也是更好的)选择是在保存字符串之前使用某种标记语言来标识字符串的重要部分。差不多。我甚至找到了一个可以帮你做这件事的方法

然后可以将字符串保存到数据库,如下所示:

<?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>
最好居住在[城市]加利福尼亚州[城市]或[城市]加利福尼亚州[城市]附近或[城市]加利福尼亚州[城市]的地方

我的名字是[第一]亚历克斯[第一][最后]福特[最后]


如果你让用户输入完整的文本句子,然后你试图找出这些句子中哪些部分是你应该在应用程序中使用的数据,那么你就给自己造成了不必要的困难。您应该要求他们将重要的数据输入到自己的文本框中,或者您应该为用户提供一种格式化语言,如前面提到的BBCode语法,以便他们能够为您识别重要的位。我认为,找出字符串的哪些部分是重要的这项工作对你来说将是一项艰巨的任务。

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

[我在寻找一些用例来测试我正在开发的模块时遇到了这个问题。显然,这个问题有点老了,但由于我的模块解决了这个问题,我想我最好在这里添加一些信息,供未来的搜索者使用。]

你应该可以使用POS chunker做你想做的事情。我最近发布了一个针对Node的chunker,它是以NLTK(Python)和Standford NLP(Java)库(分别是和方法)提供的chunker为模型的

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

这将为您提供:

Best/JJS place/NN to/TO live/VB in/IN California/NNP ./.
Best/JJS place/NN to/TO live/VB in/IN {California/NNP} ./.
现在您可以使用查找所有专有名词:

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

var places = chunker.chunk(tags, '[{ tag: NNP }]');
这将为您提供:

Best/JJS place/NN to/TO live/VB in/IN California/NNP ./.
Best/JJS place/NN to/TO live/VB in/IN {California/NNP} ./.
同样,你也可以提取动词来理解人们想做什么(“活着”、“游泳”、“吃饭”等等):

这将产生:

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

您还可以匹配单词、单词序列和标记,使用前瞻,将序列分组在一起创建块(然后匹配这些块)“

事实上,这是我尝试的第一件事,但我正在尝试地理定位。因此,SFO不需要出现在我的数据库中,但我可以得到加利福尼亚州少数地方的地理代码。@Vaya我不太明白你的确切意思,但很明显,在这种情况下,你的问题并不能真正描述你的想法。”re在后面。我的回答回答了您实际提出的问题。我不想控制用户可以键入的文本。就此而言,我已经有了带有特定下拉列表、文本框和搜索按钮的屏幕。我正在尝试解释用户想要什么(在我的域内)然后开车到正确的数据存储区进行搜索。然后祝你好运。正如我已经说过的,你需要一个包含语音使用元数据的词典数据库。我看不到任何其他方法。下面的答案对你有帮助吗?这只适用于英语还是支持其他语言(法语、西班牙语等)?您需要为您想要的语言获取词类标记器。一旦您解析了句子并获取了词类,您就可以通过
pos chunker
。恐怕我不知道其他语言中是否有与
pos
模块等价的语言。