【问题标题】:Stem comparsion algorithm词干比较算法
【发布时间】:2014-09-09 08:22:18
【问题描述】:

我正在编写一个程序,为波兰语制作单词变格。在这种语言中,词干在某些情况下可能会有所不同(因为颚化或移动/转瞬即逝的 e 和其他影响)。

例如,我们有单词“karzeł”,它是单词的基本字典形式。它的词干也是“karzeł”。但是这个词的属格形式是“karła”,词干是“karł”。我们可以在这里看到'e'消失了,'rz'变成了'r'。

另一个例子:
'uzda' -> 词干'uzd'
'uździe' -> 词干'uździ'
交替:'zd' -> 'ździ'

我只想在字典中存储词干的基本形式(“karzeł”和“uzd”),当我将词干“karł”或“uździ”放入程序时,它会找到合适的基本词干。交替只发生在词干的末尾,最多包含 4 个字母。

有没有算法可以做到这一点? Levensthein 距离对所有字母一视同仁,所以如果我输入单词 'barzeł',那么到词干 'karzeł' 的距离将小于词干 'karł'。

我也考虑过神经网络,但我不确定如何对单词进行编码(给每个词干变体不同的 id?)。

另一个想法是编写算法,该算法可以进行反向交替并创建一组可能的词干并尝试在字典中找到它们。

我想强调的是,我只想要存储词干的基本形式以及其他所有内容。

【问题讨论】:

  • levenshtein 距离可以自定义,以便赋予某些字母或字母序列更多的权重。

标签: algorithm nlp stemming


【解决方案1】:

首先,我记得周围有很多关于波兰形态学的项目。所以我会先看看它们,然后再开始你自己的。

关于 Levenshtein,正如 Pierre 在评论中正确指出的那样,距离函数可以自定义。它应该是。让我这样说吧:不要把 Levenshtein 看作是算法本身,而是对特定错误模型的解决方案。首先,他提出了一个模型,该模型表明,当您键入一个单词时,由于某些随机过程(手指没有按正确的键),每个字母都可以被删除或替换为另一个字母。那么,他的算法只是这个模型下最大似然解的生成器。您允许的错误越多,这一系列错误实际发生的概率越小,分数就越高。

不过,您(含蓄地)提出了一个非常不同的假设。波兰语词干结尾可能有一定的灵活性(在这个框架内你不完全理解的一些语言过程)。然后,当你去掉你的后缀(或看起来像一个的东西)时,有三个选项: 1)有可能你在这里所拥有的只是你存储在字典中的不同形式的词干,或者 2) 它是一个完全不同的词干,或 3)您不正确地剥离了后缀,而您所拥有的根本不是词干。 例如,您可以通过查看假定词干开头有多少字母与某些字典条目匹配来启发式地估计这些概率(如何找到这些条目是一个相关但不同的问题)。然后你可以根据你的度量/启发式选择最合理的猜测。

现在,请注意,您可以使用任何算法在字典中查找候选者。包括 Levenshtein 算法——只要你有理由确定会选择正确的算法。但显然,您最好编写自己的字典搜索算法,遵循自己的指标或模仿它。例如,通过对单词开头的字母变化给予最大/禁止的成本,并在接近结尾时减少它。

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2010-12-21
    • 2011-02-18
    相关资源
    最近更新 更多