2

我尝试在这里和那里搜索它,但找不到任何好的解决方案,所以尽管咨询了 nlp 专家。我正在开发一个文本相似性查找应用程序,我需要将成千上万的文档(每个文档大约 1000 个单词)相互匹配。对于 nlp 部分,我最好的选择是 NLTK(看到它的能力和 python 的算法友好性。但是现在当词性标记本身花费这么多时间时,我相信,nltk 可能不是最合适的。Java 或 C 不会伤害了我,因此任何解决方案都对我有用。请注意,我已经开始从 mysql 迁移到 hbase,以便在如此大量的数据上更自由地工作。但是仍然存在问题,如何执行算法。Mahout 可能是一个选择,但这也是用于机器学习,而不是专用于 nlp(可能对语音识别有好处)。还有什么可用的选项。总而言之,我需要高性能的 nlp,(从高性能机器学习降级)。(我有点倾向于 Mahout,看未来的用法)。

这是关于缩放 nltk。

4

1 回答 1

1

您可以使用 Mahout 查找哪些文档彼此最相关。

这是一个快速教程(链接),它将教您一些概念,但最好在 Mahout in Action 书籍的第 8 章中对其进行解释。

基本上,您首先需要以 Hadoop SequenceFile格式表示您的数据,您可以使用该seqdirectory命令,但这可能太慢了,因为它希望每个文档都作为自己的文件(因此,如果您有“成千上万文档” I/O 将受到影响。)这篇文章是相关的,因为它讨论了如何从 CSV 文件制作 SequenceFile,其中每一行都是一个文档。不过,如果我没记错的话,Mahout 的后备箱可能有一些功能。您可能想在 Mahout 用户邮件列表中询问。

然后,在您的文档以 Hadoop SequenceFile格式表示后,您需要应用该seq2sparse命令。可用命令行选项的完整列表在本书的第 8 章中,但您可以查看该命令的帮助提示,它会给您一个命令列表。您需要的命令之一是-a您要使用的(lucene?)文本分析器的类名,在这里您可以去除停用词、词干、删除标点符号等...默认分析器是org.apache.lucene.analysis.standard.StandardAnalyzer.

然后,您使用rowid命令将数据表示为矩阵。

之后,您使用该rowsimilarity命令获取最相似的文档。

希望这可以帮助。

于 2013-04-03T09:42:44.877 回答