如何使用wordnet的类别(java作为接口)来使用wordnet标记文本?
示例
考虑句子:
1)计算机需要键盘,监视器,CPU才能工作。
2)汽车使用齿轮和离合器。
现在我的目标是,例句必须标记为
计算机/电子
键盘/电子
CPU /电子灯
汽车/机械
齿轮/机械
离合器/机械
“使用微芯片监控离合器和齿轮” - >离合/机械,齿轮/机械,微芯片/电子
“此处用于监测氢含量的软件” - >软件/计算机,氢/化学..
我想在java上实现上面提到的目标,即通过技术,机械,电气等相关类别来标记名词。
如何使用wordnet执行此操作。
我之前的作品
为了实现我的目标,我在每个类别的文本文件中创建了一个术语索引,并将其与标题匹配..如果它在文本文件中包含一个单词,则标题将被分类。
例如
Automobile.txt
有car , gear , wheel , clutch
。
networking.txt
有server,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 = {microchip,RAM,ROM,...)
是否有像上述结构中可用的单词数据库..
或者我是否有现成的图书馆?
答案 0 :(得分:2)
您需要将一堆名词(例如“汽车”,“装备”)分类为预定义的类别(例如“汽车”)。虽然命名实体识别是正确完成此任务的方式,但它有其问题,主要是收集足够的注释数据以便正确地训练系统。
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 属于汽车类别而三星属于电子类别,那么这根本无济于事......仅仅因为WordNet没有分类这些名词。在WordNet上构建的其他本体可以在这种情况下为您提供帮助: