【问题标题】:How to know if two words have the same base?如何知道两个单词是否具有相同的基础?
【发布时间】:2012-01-13 19:46:49
【问题描述】:

我想知道,在几种语言中,如果两个词是:

  • 同一个词,
  • 或同一个词的语法变体。

例如:

  • hadhas 具有相同的基础:在这两种情况下,它都是动词 have
  • citycities 具有相同的基数。
  • wentgone 具有相同的基数。

有没有办法使用 Microsoft Word API 不仅可以检查文本的拼写检查,还可以将单词规范化为基数,或者至少确定两个单词是否具有相同的基数?

如果不是,哪些(免费或付费)图书馆(不是网络服务)允许我这样做(同样,以多种语言)?

【问题讨论】:

  • 当您说您希望在多种语言中完成此操作时,您的意思是您要比较的单词在一次比较中可以是不同的语言吗?例如,英语单词“city”是否应该与德语单词“Stadt”匹配?或者您是否希望您要比较的两个词至少存在于同一个字典中?
  • @M.Babcock:我只比较英语和英语、德语和德语,所以我一次只需要一本字典。
  • 如果它有助于您的搜索——通常的术语是“词干”(参见en.wikipedia.org/wiki/Stemming)。
  • “clearing”是否与“clearings”(名词=开放空间)或“clear/clears/cleared”(动词)具有相同的基础?并且“清晰”与“更清晰/最清晰”相同,还是没有相关词的副词?如果没有单词在句子中的使用上下文以及(非常大的)单词形式及其关系的字典,最好的方法是使用词干提取并接受它的错误率很小。
  • @BradleyGrainger:我想说,如果一个词是名词而另一个词是动词,那么 API 必须告诉它们是两个不同的词。但我仍然可能会接受说这两个词具有相同基础的 API。

标签: c# grammar nlp


【解决方案1】:

Inflector.NET 是一个开源库,您可以使用它来规范英语名词的变形。可在:https://github.com/davidarkemp/Inflector/tree/master/Inflector

【讨论】:

  • (1) 它似乎只适用于英语。 (2)即使对于英语,它也不起作用:即使它适用于我在问题中给出的三个示例中的一个(城市/城市),但对于其他两个例子来说它却失败了,不计算存在于英语语法。
  • @MainMa,该类允许包含其他“边缘情况”。此类仅适用于名词(我已更新我的答案以反映这一点)。您是正确的,这只是英语,但是您可以在更本地化的实现中利用设计模式。祝你好运
【解决方案2】:

Snowball 是一个词干 API,可以处理各种自然语言,并且有适用于各种编程语言的 Snowball 实现。

http://snowball.tartarus.org/

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 2021-12-22
    • 1970-01-01
    • 2020-01-31
    • 2017-09-12
    • 1970-01-01
    • 2010-12-29
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多