使用网络服务或软件库,我希望能够识别与根词相关的单词(例如,“就座”和“安全带”共享根词“座位”但“西雅图”不会算是一场比赛)。对于这种事情,简单的字符串比较似乎是不可行的。
如果没有定义我自己的字典,是否有任何库或Web服务不能只返回单词定义,而是返回单词的“根单词”,以便我可以执行此类检查?
答案 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,其中最好的答案是下载维基百科的副本,你可以忽略所有你不需要的东西。
在查看了一些流行的词源和词根搜索网站后,他们都以座位作为查询(wordinfo,prefixsuffix和etymonline)而失败。
如果座位只是一个例子而且找到相关单词的三种最受欢迎的服务都失败了,那么它们可能不是你最好的选择。出于这个原因,我建议Wiktionary。
几乎每一页维基词典都非常详细,即使是座位,也会列出动词部分下的所有相关词语。
座位(第三人称单数简单礼物席位,现在分词 座位,简单的过去和过去分词就座)
它们甚至是粗体和超链接,因此将它们解析为本地词典将是微不足道的。
就个人而言,我更喜欢使用本地表而不是使用Web服务,因为Web服务可能会停机,速度很慢,并且需要您的用户连接到Internet才能使用您的应用程序。 / p>