单词预测 - 获得最常见的前任和继任者

时间:2012-01-07 12:11:47

标签: word nlp prediction

有了一个词,我想得到英语单词中最常用的前辈和继承者的列表。 我已经开发了一个代码,可以对任何语料库进行双字母分析(我使用过安然电子邮件语料库)并且可以预测最常用的下一个可能的单词,但我想要一些其他解决方案,因为 a)我想检查我预测的工作/准确性 b)基于语料库或数据集的解决方案因看不见的单词而失败

例如,考虑到“优秀”这个词,我希望得到最优秀且优秀之后的词语

我的问题是,为此目的是否存在任何特定服务或api?

3 个答案:

答案 0 :(得分:3)

这个问题的任何解决方案都必然是基于语料库的方法;你只需要一个更大的语料库。我不知道有任何网络服务或图书馆为你做这件事,但有办法获得更大的语料库:

  • Google有published从网络英语部分收集的大量 n -grams语料库。它是available通过语言数据联盟(LDC),但我相信你必须是最不发达国家成员才能获得它。 (很多大学都是。)
  • 如果您不是最不发达国家成员,请尝试下载Wikipedia database dump(获取enwiki)并对其进行预测。
  • 如果您碰巧使用的是Python,请查看随NLTK一起提供的一套很好的语料库(和工具)。

至于看不见的单词问题,有办法解决它,例如:通过在训练之前通过特殊标记(例如<unseen>)替换所有出现频率低于某个阈值的单词。这将使您的评估更加困难。

答案 1 :(得分:2)

我只是重新阅读了原来的问题而且我意识到了答案,包括我的答案。我认为原始人只想解决一个简单的编程问题,而不是寻找数据集。

如果您列出所有不同的单词对并计算它们,那么您可以在该列表上使用简单的数学回答您的问题。

当然,您必须进行大量处理才能生成列表。虽然确实如果不同单词的总数是30,000,那么就有10亿个可能的对,我怀疑在实践中有那么多。因此,您可以在内存(或磁盘)上创建一个包含巨大哈希表的程序,并将它们全部计算在内。如果您不需要无关紧要的对,您可以编写一个程序,在扫描时定期冲洗不太重要的程序。你也可以对单词列表进行分段,然后生成一百个单词与其余单词对,然后是下一百个,依此类推,并以通过方式计算。

我原来的答案就在这里,我要离开了,因为这是我自己的相关问题:

我对类似的东西很感兴趣(我正在编写一个输入系统,建议单词补全和标点符号,我希望它是多语言的。)

我找到了google的ngram文件的下载页面,但它们并不是那么好,它们充满了扫描错误。 '我变成了'1',单词汇集在一起​​等等。希望Google从那时起就改进了扫描技术。

just-download-wikipedia-unpack = it-and-strip-the-xml的想法对我来说是一个半身像,我没有快速的计算机(嘿,我可以选择原子上网本和android设备)。想象一下,打开一个3千兆字节的bz2文件成为什么需要多长时间? 100个xml,然后处理它美丽的汤和过滤器,他承认崩溃在每个文件的一部分,需要重新启动。

出于您的目的(前一个和后一个单词),您可以创建一个真实单词字典并过滤ngram列表以排除误读的单词。人们可能希望扫描足够好,你可以通过只采用最流行的词语来排除misscans ...但我看到了一些不断出错的迹象。

ngram数据集在这里http://books.google.com/ngrams/datasets

此网站可能包含您想要的内容http://www.wordfrequency.info/

答案 2 :(得分:2)

您必须提供一些“看不见”字的更多实例或上下文,以便算法可以做出一些推断。 一种间接方式可以是阅读句子中的其余单词...并查看字典中的单词遇到的单词。 通常,您不能期望算法在第一次学习和理解推理。想想你自己..如果给你一个新词......你能用它来表达它的意义(可能通过研究它在句子中的用法以及你的理解力度如何),然后你做了一个有根据的猜测和在一段时间内你理解了它的含义。