Java 将一个英语单词识别为物品或产品?

Java 将一个英语单词识别为物品或产品?,java,python,nlp,nltk,text-mining,Java,Python,Nlp,Nltk,Text Mining,编写具有以下目标的程序- 能够识别一个单词/短语是否代表一种事物/产品。比如说- 1) “至少包括食指容器、中指容器的手套”此任务称为命名实体再认问题 编辑:NLP社区中没有明确的NER定义,所以可以说这不是NER任务,而是更一般的序列标记问题的实例。无论如何,仍然没有现成的工具可以做到这一点 现成的Standford NLP只能识别以下类型: 识别命名(人员、位置、组织、杂项)、数字 (货币、数字、序号、百分比)和时间(日期、时间、持续时间、, 集合)实体 因此,它不适合解决这项任务。有一些可

编写具有以下目标的程序- 能够识别一个单词/短语是否代表一种事物/产品。比如说-
1) “至少包括食指容器、中指容器的手套”此任务称为命名实体再认问题

编辑:NLP社区中没有明确的NER定义,所以可以说这不是NER任务,而是更一般的序列标记问题的实例。无论如何,仍然没有现成的工具可以做到这一点

现成的Standford NLP只能识别以下类型:

识别命名(人员、位置、组织、杂项)、数字 (货币、数字、序号、百分比)和时间(日期、时间、持续时间、, 集合)实体

因此,它不适合解决这项任务。有一些可能的商业解决方案可以做到这一点,它们可以通过谷歌搜索“产品名称命名实体识别”轻松找到,其中一些提供免费试用计划。我不知道任何免费的现成部署解决方案

当然,您可以创建自己的模型,方法是手工注释大约1000个包含句子的产品名称,并使用一些基本功能训练一些分类器,如条件随机场分类器(这解释了如何使用斯坦福NLP实现这一点)。这个解决方案应该工作得很好,但它当然不是完美的(没有一个系统是完美的,但有些解决方案比其他的更好)

编辑:这本身就是一项复杂的任务,但并没有那个么复杂,除非你们想要最先进的结果。您可以在2-3天内创建合理的良好模型。以下是(示例)如何使用开源工具进行此操作的分步说明:

  • 下载并查看提供的示例,它们是简单的文本格式
  • 以类似的方式对数据进行注释
  • 查看result.txt。一列将包含手动标记的数据和其他机器预测的标签。然后,您可以比较这些数据,计算准确度等。之后,您可以将新的未标记数据输入crf_测试并获得标签 正如我所说的,这并不完美,但如果这不是合理的好(不久前我实际上解决了非常类似的任务),而且仅仅使用几个关键字/模板肯定会更好,我会非常惊讶


    尾注:这忽略了许多事情和解决此类任务的一些最佳实践,不利于学术研究,也不能保证100%有效,但对这类问题和许多类似问题仍然有用,可以作为相对快速的解决方案

    你想做的事情其实很难。这是一种(非常具体的)语义标记任务。可能的解决办法是:

    • 创建自己的标签算法,创建培训数据,测试、评估并最终标记数据
    • 使用现有的知识库(词典)提取每个目标词的语义标签
    第一种选择本身就是一个复杂的研究项目。如果你有时间和资源就去做


    第二个选项只提供知识库中可用的标签,这些标签可能与您的愿望不符。我将尝试使用python、NLTK和Wordnet(),您可能可以使用synset超名称来解决您的问题

    您已经尝试过什么,以及您希望SO社区如何帮助您?@user1998698:我尝试过的-如果文本的措辞类似于“仪器中的…”-如果文本包含通用关键字,如仪器/设备等,我会进行简单的关键字搜索和比较,将文本分类为谈论“事物/产品”。但如果文本中有实际产品的名称,如手套或发动机,我不知道如何将该词识别为物品/产品。SO社区可以通过建议一种实现方法来帮助我。可以这样做吗?如果可以,怎么做?一个代码示例将是理想的,但指向NLP、NLTK或更高版本中的一些有用函数、概念的指针也可以!你试过斯坦福NLP实用程序吗?nlp.stanford.edu/research.shtml@Magnamag:不,我还没有。你能告诉我一些更具体的事情吗,因为有很多斯坦福NLP研究流。你必须检查你所说的。。。“手套”、“调节器”、“过程”不是命名实体。@emiguevara(也称为实体识别、实体组块和实体提取)是信息提取的子任务,旨在定位文本中的元素并将其分类为预定义的类别”。类别可以是任何东西。在这种情况下,类别为“物品/产品”。我建议的方法将用于此任务。我支持我之前的评论,不需要取消对维基百科的信任。“手套”、“调节器”、“过程”不是NER文献中常见的命名实体。“奥巴马”、“美国总统”、“波士顿”、“IBM”是你从格瓦拉那里得到的常见例子。这是关于术语的争论。好的,假设这是序列标记问题的例子。这不会有多大变化谢谢你的回复。第二种选择是使用非专业英语的单词数据库,但这难道不意味着这个数据库基本上包含了所有可以代表这个星球上的事物的单词吗?更详细地说,我的数据集可以谈论任何可以制造的东西。这意味着我必须将我的数据集与一个包含大量可能的产品词的数据库进行比较。你或多或少在正确的轨道上。词法数据库不可能包含每个单词,因为这是不可行的,但只能包含相当多的单词(Wordnet 3.0有大约160000个不同的字符串,120000个名词)。您的应用程序不需要将每个单词与数据库中的每个条目进行比较,这将是愚蠢的。你可以用很多方法来设计它,但我想,对于每个目标词,一次查找应该会给出该词的语法集超义词,根据这些信息,你应该能够做出决定。你能用一个例子来详细说明吗?那么说,, a OTHER glove PRODUCT comprising OTHER ... U02:%x[0,0] U01:%x[-1,0] U01:%x[-2,0] U02:%x[0,0] U03:%x[1,0] U04:%x[2,0] U05:%x[-1,0]/%x[0,0] U06:%x[0,0]/%x[1,0]
    crf_learn template train.txt model
    crf_test -m model dev.txt  > result.txt