java - 如何使用 WordNet 或与 wordnet 相关的实现基于类别的文本标记?

标签 java machine-learning nlp classification wordnet

如何使用 wordnet 按单词类别标记文本(java 作为接口(interface))?

示例

考虑以下句子:

1) 计算机需要键盘、显示器、CPU 才能工作。
2)汽车使用齿轮和离合器。

现在我的目标是,必须将例句标记为

  • 第一句

Computer/electronic
keyboard/electronic
CPU / electronic

  • 第二句

    Automobile / mechanical
    gears / mechanical
    clutch / mechanical

一些额外的例子......

“使用微芯片监控离合器和齿轮” -> 离合器/机械、齿轮/机械、微芯片/电子

“此处用于监测氢含量的软件”-> 软件/计算机,氢/化学..

我想在 java 中实现上面提到的目标,即通过相关类别标记名词,如技术、机械、电气等。

如何使用 wordnet 执行此操作。

我以前的作品

为了实现我的目标,我在文本文件中为每个类别创建了一个术语索引,并将其与标题匹配。如果文本文件中包含一个词,那么标题就会被分类。

例如

Automobile.txtcar , gear , wheel , clutch
networking.txtserver,IP Address,TCP, RIP

这是算法:

String Classify (String title)
{
 String area;
 if (compareWordsFrom ("Automobile.txt",title) == true ) area = "Auto";
 if (compareWordsFrom ("Netoworking.txt",title) == true ) area = "Networking";
 if (compareWordsFrom ("metels.txt",title) == true ) area = "Metallurgy";
 return area;
}

很难找到相关的词来建立索引。也就是说,汽车领域有1000个很难找到的相关术语。

准确地说,手动建立术语索引是一个令人心碎的过程

我已经用过 Stanford NLP , Open NLP ,但是他们在标记 POS ,但不能满足需要。

我的需求
我的工作需要一种自动化的方式。做自然语言处理技术能够做到。 ?

有人建议使用 wordnet 库,但我怎么能使用它,因为它就像字典,但我想要像 ..

机械 = {齿轮、涡轮、发动机 ....) electronic = {微芯片,RAM,ROM,...)

是否有类似上述结构的单词数据库..

或者是否有现成的库可用?

最佳答案

您需要将一堆名词(例如“汽车”、“齿轮”)归入预定义的类别(例如“汽车”)。虽然命名实体识别是完成此任务的正确方法,但它也有其问题,主要问题是收集足够的注释数据以正确训练系统。

WordNet 可以帮助建立 semantic similarity 名词之间,从而帮助您根据相似性分数选择类别。有几种建立相似性分数的方法。一些突出的是

基本思想是相似的术语通过本体(例如 WordNet)归入相似的类别。因此,它们在本体的类别树中的类别之间的距离如果密切相关则将更短,否则将更长。也许最简单的此类分数是路径分数:

PathScore(s1, s2) = 1/pathLength(s1, s2)

其中 pathLength 是上述类别树中路径的长度。

举例说明:

PathScore(*car*, *automobile*) = 1.0;     // path score is always between 0 and 1
WuPalmerScore(*car*, *automobile*) = 1.0; // Wu & Palmer's score is always between 0 and 1

PathScore(*engine*, *automobile*) = 0.25;
WuPalmerScore(*engine*, *automobile*) = 0.88;

PathScore(*microprocessor*, *automobile*) = 0.09;
WuPalmerScore(*microprocessor*, *automobile*) = 0.58;

因此,如您所见,您希望属于同一类别的术语通常具有更高的相似度分数。最好的库是 WordNet Similarity for Java ,它提供了几个相似性指标供您进行试验。他们还有一个 online demo here .

警告 如果您尝试标记专有名词,WordNet 将无法正常运行。例如,如果您希望 Hyundai 属于汽车类别,Samsung 属于电子产品类别,这根本无济于事...因为 WordNet 不进行分类这些名词。在这种情况下,还有其他建立在 WordNet 之上的本体可以帮助您:

  • 其中一个著名的本体是 Yago
  • 使用维基百科类别是另一种成功的方法。

关于java - 如何使用 WordNet 或与 wordnet 相关的实现基于类别的文本标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21533837/

相关文章:

java - 为 MQSeries 编写 Java 客户端的最低要求是什么?

java - 为什么使用 PDF 文本提取器从 PDF 中提取的文本是分散的和非结构化的?

python - PyTorch 在用线性模型逼近平方函数时不收敛

r - 仅保留语料库中包含特定关键词的句子(R 中)

php - 使用 PHP 提取上下文中单词出现的实例,并按特定条件过滤结果

nlp - 有关于 giza++ 的教程吗?

java - liquibase - 使用java比较两个数据库后如何从变更日志生成sql脚本?

Java EE 6 教程组件

python - Snorkel:我可以在数据集中使用不同的特征来生成标签函数 VS 训练分类器吗?

machine-learning - 如何使用经过训练的模型创建模型?