给定一个单词,我想获得该单词在英语中最常见的前序和后序列表。我已经开发了一个代码,可以对任何语料库进行二元分析(我使用过安然电子邮件语料库),并可以预测下一个最频繁的单词,但我想要一些其他解决方案,因为a) 我想检查一下我的预测是否有效b) 基于语料库或数据集的解决方案对于看不见的单词失败
例如,给定单词"优秀",我想得到最有可能出现在优秀之前和之后的单词
我的问题是,是否存在任何特定的服务或api?
这个问题的任何解决方案都必然是基于语料库的方法;你只需要一个更大的语料库。我不知道有任何网络服务或图书馆为你做这件事,但有一些方法可以获得更大的语料库:
- 谷歌发布了一个庞大的n语法语料库,这些语法是从网络的英语部分收集的。它可以通过语言数据联盟(LDC)获得,但我相信你必须是LDC的成员才能获得。(许多大学都是。)
- 如果您不是LDC成员,请尝试下载维基百科数据库转储(获取
enwiki
),并就此对预测器进行培训 - 如果您碰巧使用Python,请查看NLTK提供的一组不错的语料库(和工具)
至于看不见的单词问题,有一些方法可以解决,例如,在训练前用<unseen>
这样的特殊标记替换所有出现频率低于某个阈值的单词。这会让你的评估更加困难。
您必须提供更多"看不见"单词的实例或上下文,以便算法进行一些推断。一种间接的方法可以是阅读句子中的其余单词。。并在字典中查找遇到这些单词的单词。一般来说,你不能指望算法能在第一时间学习和理解推理。想想你自己。。如果给你一个新词。。你能很好地理解它的含义(可能是通过观察它在句子中的使用方式和你的理解程度),但你会做出有根据的猜测,经过一段时间你就会理解它的意思。
我刚刚重读了原来的问题,我意识到答案,包括我的答案都偏离了基础。我认为最初的人只是想解决一个简单的编程问题,而不是寻找数据集。
如果你列出所有不同的单词对并对其进行计数,那么你就可以在列表上用简单的数学方法回答你的问题。
当然,您必须进行大量处理才能生成列表。虽然确实,如果不同单词的总数多达30000个,那么可能有十亿对,但我怀疑在实践中是否有那么多。因此,您可能可以在内存(或磁盘)中制作一个具有巨大哈希表的程序,然后将其全部计数。如果你不需要不重要的配对,你可以写一个程序,在扫描时定期清除不太重要的配对。此外,你可以对单词列表进行分段,生成一对100个单词的诗句,其余的,然后是下一个100个,依此类推,并依次计算。
我最初的答案在这里,我要离开它,因为这是我自己的相关问题:
我对类似的东西感兴趣(我正在写一个建议单词完成和标点符号的输入系统,我希望它是多语言的)。
我找到了谷歌ngram文件的下载页面,但它们并不是很好,到处都是扫描错误我变成了‘1’,单词一起运行等等。希望谷歌从那时起改进了他们的扫描技术。
只需下载wikipedia unpack=it并去掉xml的想法对我来说是个失败,我没有一台快速的电脑(嘿,我可以在这里的atom上网本和安卓设备之间做出选择)。想象一下,我需要多长时间才能打开一个3 GB的bz2文件,变成什么?100个xml,然后用漂亮的汤和过滤器处理它,他承认这些过滤器在每个文件的中途崩溃,需要重新启动。
为了您的目的(前一个和后一个单词),您可以创建一个真实单词的字典,并过滤ngram列表以排除错误扫描的单词。有人可能希望扫描足够好,你可以通过只取最流行的单词来排除拼写错误。。。但我看到了一些不断犯错的迹象。
ngram数据集在这里http://books.google.com/ngrams/datasets
这个网站可能有你想要的http://www.wordfrequency.info/