使用web服务或软件库,我希望能够识别与词根相关的单词(例如,"seated“和"seatbelt”共享词根"seat“,但"Seattle”不被认为是匹配的)。对于这种事情,简单的字符串比较似乎是不可行的。
除了定义我自己的字典之外,有没有库或web服务不仅可以返回单词定义,还可以返回单词的“词根单词”,以便我可以执行这种类型的检查?
发布于 2011-10-16 00:05:40
Here是英语的雪球词干分析器。
您可以将其用作:
SF.Snowball.Ext.EnglishStemmer eng = new SF.Snowball.Ext.EnglishStemmer();
eng.SetCurrent("Seated");
eng.Stem();
Console.WriteLine(eng.GetCurrent()); //returns Seat发布于 2011-10-15 23:58:57
这是一件复杂的事情,要求计算机来做,但有方法和方法。
这个问题有几个技巧:
A "regex for words" (semantic replacement) - any example syntax and libraries?
但如果你想自己做实验,你可以考虑做的是研究音素和Soundex或Double Metaphone算法。在维基百科上查找“语音算法”。
这个想法很简单,就是你计算出一个单词的发音,然后可以用数学表示出来,然后你可以把它与你的字典进行比较,字典已经用这个表示预先计算过了。
这将做的是将字典缩减为(希望)可操作的数据集,您将不得不以某种方式进行分析。
但是,对于您的特定示例,您必须比较Seated、安全带和西雅图的算法值。
无论如何,我知道这不是一个完整的答案,但我希望它足以让您入门。
祝好运!
发布于 2011-10-16 00:06:58
我记得读过一篇somewhat related question on this site,其中最好的答案是下载一份维基百科,这样你就可以忽略所有你不需要的东西。
在检查了一些流行的词源和词根搜索网站后,它们都以seat作为查询失败(wordinfo、prefixsuffix和etymonline)。
如果seat只是一个例子,三个最流行的查找相关单词的服务都失败了,那么它们可能不是你最好的选择。出于这个原因,我推荐使用Wiktionary。
Wiktionary上的几乎每个页面都非常详细,甚至对于seat,它在动词部分下列出了所有相关的单词。
seat (第三人称单数简单现在时seats,现在分词seating,简单过去分词seated)
它们甚至是粗体和超链接的,因此将它们解析到本地字典中将是微不足道的。
就我个人而言,我更喜欢有一个本地表,而不是使用web服务,因为web服务可能会宕机,它可能会很慢,而且它需要用户连接到internet才能使用您的应用程序。
https://stackoverflow.com/questions/7778836
复制相似问题