我试着在这里和那里搜索它,但找不到任何好的解决方案,所以尽管询问了 nlp 专家。我正在开发一个文本相似性查找应用程序,我需要将成千上万的文档(每个文档大约 1000 个单词)相互匹配。对于 nlp 部分,我最好的选择是 NLTK(看到它的功能和 python 的算法友好性。但是现在当词性标记本身花费了很多时间时,我相信 nltk 可能不是最合适的。Java 或 C 不会伤害了我,因此任何解决方案都对我有用。 请注意,我已经开始从 mysql 迁移到 hbase,以便更自由地处理如此大量的数据。但是仍然存在问题,如何执行算法。 Mahout 可能是一个选择,但这也是机器学习的选择,而不是专用于 nlp(可能对语音识别有好处)。还有什么可用的选项。在要点上,我需要高性能 nlp,(从高性能机器学习向下一步)。 (我有点倾向于 Mahout,看到 future 的用法)。
它是关于扩展 nltk 的。
最佳答案
您可以使用 Mahout 查找彼此最相关的文档。
这是一个快速教程 (link),它将教您一些概念,但在 Mahout in Action 一书的第 8 章中对它们进行了最好的解释。
基本上,您首先需要在 Hadoop 中表示您的数据 SequenceFile格式,你可以使用 seqdirectory
命令,但这可能会太慢,因为它希望每个文档都作为自己的文件(所以如果你有“成千上万的文档”我/O 会受苦的。)This post在某种意义上是相关的,它讨论如何从 CSV 文件制作 SequenceFile,其中每一行都是一个文档。不过,如果我没记错的话,Mahout 的主干可能有一些功能。您可能想在 Mahout 用户邮件列表中提问。
然后,在您的文档在 Hadoop 中呈现之后 SequenceFile格式,您需要应用 seq2sparse
命令。可用命令行选项的完整列表在本书的第 8 章中,但您可以点击该命令以获取其帮助提示,它会为您提供一个命令列表。您需要的命令之一是 -a
,它是您要使用的 (lucene?) 文本分析器的类名,在这里您可以删除停用词、词干、删除标点符号等等...默认分析器是 org.apache.lucene.analysis.standard.StandardAnalyzer
。
然后使用 rowid
命令将数据表示为矩阵。
之后,您使用rowsimilarity
命令来获取最相似的文档。
希望这对您有所帮助。
关于python - 如何提高 NLTK 的性能?备择方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15782898/