【问题标题】:Build a natural language model that fixes misspellings构建修复拼写错误的自然语言模型
【发布时间】:2011-01-15 06:19:44
【问题描述】:

关于如何构建这样的自然语言解析程序的书籍有哪些:

输入:我要高大你 输出:我要告诉你 输入:大老鼠盒 输出:大红盒子 在: hoo un thum zend 三 出:一千三

它必须具有允许预测拼错单词的语言模型!

关于如何构建这种工具的最佳书籍有哪些?

附言有免费的网络服务来进行拼写检查吗?可能来自谷歌?..

【问题讨论】:

  • +1 表示“拼写错误”。那是个笑话,对吧?
  • @APC 哈哈哈。快速打字,但它展示了这些工具如何有用。
  • +1,在 Google Wave 中使用 Spelly! :P
  • 您的前两个示例是语法更正,而不是拼写更正。例如,如果我有一个放老鼠的盒子,那它就是一个老鼠盒子。如果它很大,那将是一个 Big RAT 盒子。在第一种情况下,形容词代替了动词。 (相对而言易于检测)在第二种情况下,根据我的示例,RAT(通常是名词)这个词也可以是形容词。所以那个句子片段的语法很好。 (假设你不在乎这不是一个句子)祝你好运!
  • @Jason D 我也需要语法更正。我必须确保上下文会告诉哪个词在那个位置最有可能。

标签: java parsing nlp linguistics


【解决方案1】:

你至少有三个选项

  1. 您可以编写一个理解该语言的程序(即单词的含义)。这是今天的研究课题。当您可以购买一台速度足以运行此类程序的计算机时(这可能是在 10 年后计算机的速度比现在快 1000 倍)时,您可以期待第一个结果。

  2. 使用庞大的语料库(文本文档)来训练Hidden Marcov Model

  3. 使用庞大的语料库并生成关于 quadruplets n-gram 的统计信息,即 N 个单词的元组出现的频率。我没有方便的链接,但想法是有些词总是出现在其他词的上下文中。因此,当您将文本解析为 4-gram 并在数据库中查找它们时,您无法找到它,可能是当前元组有问题。下一步是找到所有可能的匹配项(其他 4-grams,它们与当前匹配项具有较小的 soundex 或相似距离)并尝试频率最高的匹配项。

    Google 拥有多种语言的此类数据,您可能会在 Google 实验室中找到更多相关信息。

[编辑] 经过一番谷歌搜索,我终于找到了链接:在this page,你可以购买谷歌在整个互联网上收集的 6 张 DVD 上的 1 到 5 克英文。

谷歌搜索“google spelling statistics n-grams”也会找到一些有趣的链接。

【讨论】:

  • Google 会与我分享这些数据吗? ;)
  • 我想是的。我真的必须再次找到链接。
  • 感谢您提供完整而有趣的答案。
【解决方案2】:

有很多用于自然语言处理的 Java 库可以帮助您实现拼写校正器。但你问的是一本书。 Foundations of Statistical Natural Language Processing Christopher D. Manning 和 Hinrich Schütze 看起来是个不错的选择。第一作者是斯坦福大学教授,他领导的团队从事自然语言处理和开发 Java 库和许多人使用的 NLP 资源。

【讨论】:

    【解决方案3】:

    Dev Days London 中,Michael Sparks 展示了一个专门为此编码的 Python 脚本。非常简单!看看你能不能在谷歌上找到。也许这里有人会有链接。

    【讨论】:

    【解决方案4】:

    Peter Norvig 写了一个很棒的spell checker。也许这可以帮助你。

    【讨论】:

    • 只是要链接它:-) +1
    • 很酷的脚本。如果您有所选语言的正确文本语料库,似乎将其扩展到单词二元组或三元组会​​很简单。
    • 没错,这就是我在下面的帖子中试图记住的脚本。 +1
    【解决方案5】:

    soundex (wiki) 是一种选择

    【讨论】:

    • 正如乔治·伯纳德·肖(George Bernard Shaw)(以及许多其他人)经常抱怨的那样,事物的拼写方式和发音方式之间往往存在很大差异。至少是英文的。 SOUNDEX() 可能是一种有效的方法,比如意大利语。
    • 这个内置在 Delphi RTL 中,它非常难以预测,但相当酷 - 适合喜欢写 fenetiklee err.. 语音的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2011-01-30
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多