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

Rag*_*ony 6 java nlp classification machine-learning wordnet

如何使用wordnet的类别(java作为接口)来使用wordnet标记文本?


考虑句子:

1)计算机需要键盘,监视器,CPU才能工作.
2)汽车使用齿轮和离合器.

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

  • 第一句话

电脑/电子
键盘/电子
CPU /电子

  • 第二句话

    汽车/机械
    齿轮/机械
    离合器/机械

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

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

"此处用于监测氢气水平的软件" - >软件/计算机,氢/化学..

我想在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;
}
Run Code Online (Sandbox Code Playgroud)

找到建立索引的相关词语非常困难.也就是说,现场汽车有1000个难以找到的相关术语.

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

我已经使用过Stanford NLP,Open NLP,但他们正在标记POS,但不满足需要.

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

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

mechanical = {gear,turbine,engine ....)electronic = {microchip,RAM,ROM,...)

有没有像上面提到的结构中可用的单词数据库..

或者我有一个现成的图书馆?

Cht*_*ect 2

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

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

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

PathScore(s1, s2) = 1/pathLength(s1, s2)
Run Code Online (Sandbox Code Playgroud)

其中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;
Run Code Online (Sandbox Code Playgroud)

因此,正如您所看到的,您想要在同一类别中的术语通常具有更高的相似度分数。执行此操作的最佳库是WordNet Comparison for Java,它提供了多种相似性指标供您进行试验。他们在这里还有在线演示

警告如果您尝试标记专有名词,WordNet 的性能将不佳。例如,如果您希望Hyundai属于汽车类别,Samsung属于电子类别,这根本没有帮助......只是因为 WordNet 没有对这些名词进行分类。在 WordNet 之上构建的其他本体可以在这种情况下为您提供帮助:

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