确定相关词的程序化方法?

时间:2011-10-15 15:45:22

标签: c# web-services dictionary semantics

使用网络服务或软件库,我希望能够识别与根词相关的单词(例如,“就座”和“安全带”共享根词“座位”但“西雅图”不会算是一场比赛)。对于这种事情,简单的字符串比较似乎是不可行的。

如果没有定义我自己的字典,是否有任何库或Web服务不能只返回单词定义,而是返回单词的“根单词”,以便我可以执行此类检查?

3 个答案:

答案 0 :(得分:4)

要求计算机做这件事很复杂,但有方法和手段。

这个问题有几个技巧:

A "regex for words" (semantic replacement) - any example syntax and libraries?

但是如果你想自己试验一下,你可以考虑做的就是查看音素和Soundex或Double Metaphone算法。查看维基百科上的“语音算法”。

这个想法很简单,你可以找出一个单词听起来像什么,然后可以用数学方式表示,然后你就可以将它与你用这个表示法预先计算过的字典进行比较。

这样做会将字典缩减为(希望)可行的数据集,您必须以某种方式进行分析。

对于您的具体示例,您必须比较Seated,Seatbelt和Seattle的算法值。

无论如何,我知道这不是一个完整的答案,但我希望这足以让你开始。

祝你好运!

答案 1 :(得分:3)

Here是英语的雪球词干。

您可以将其用作:

SF.Snowball.Ext.EnglishStemmer eng = new SF.Snowball.Ext.EnglishStemmer();
eng.SetCurrent("Seated");
eng.Stem();
Console.WriteLine(eng.GetCurrent()); //returns Seat

答案 2 :(得分:1)

我记得读过somewhat related question on this site,其中最好的答案是下载维基百科的副本,你可以忽略所有你不需要的东西。

在查看了一些流行的词源和词根搜索网站后,他们都以座位作为查询(wordinfoprefixsuffixetymonline)而失败。

如果座位只是一个例子而且找到相关单词的三种最受欢迎​​的服务都失败了,那么它们可能不是你最好的选择。出于这个原因,我建议Wiktionary

几乎每一页维基词典都非常详细,即使是座位,也会列出动词部分下的所有相关词语。

  

座位(第三人称单数简单礼物席位,现在分词   座位,简单的过去和过去分词就座

它们甚至是粗体和超链接,因此将它们解析为本地词典将是微不足道的。

就个人而言,我更喜欢使用本地表而不是使用Web服务,因为Web服务可能会停机,速度很慢,并且需要您的用户连接到Internet才能使用您的应用程序。 / p>