我目前正在开发一个依赖于接收csv文件的Python项目。 csv文件包含数千个随机句子,某些句子之间有一些相似性。我的代码的目的是识别哪种句子是一种类型,并在上下文中引用相同的事物。
例如,所有引用Gmail的句子如:
Gmail login
Gmail account login
Gmail account register
指的是相同的上下文,但在输入文件中可能相距很远,嵌套在引用不同上下文的无关句子中。我到目前为止使用的方法是:
按字母顺序对句子中的每个单词进行排序,如下所示:
帐户gmail登录
将文件中的原始索引作为自己的列,在csv文件中按字母顺序对句子进行排序,然后将它们加载到pandas数据框中
通过数据框并相互比较句子。这是使用FuzzyWuzzy's token_set_ratio方法来识别彼此匹配的术语(相等== 100),将相似的单词组合在一起然后写入文件。
当数据帧被迭代完毕后,我们再次遍历它,并将我们创建的索引与自己的列匹配到输入文件中的相应行,以返回原始句子。
这种方法一直很有希望,但它遭受的是不良匹配和句子,而不是同一组中的相同背景。是否有更好的方法可以做我想做的事情?
答案 0 :(得分:2)
有很多方法可以实现文档相似性分析,来自文本分析/挖掘领域。
在您的情况下,您似乎拥有标准化的单词文档(行)。然后,您可以执行文档比较,而无需通过Levenstein距离的三元组相似性来比较单词。
基本上,使用inverted file来存储术语,执行cosine similarity in the vector model是检测文档相似性的简单而有效的方法。
使用其他一些技术或distance/similarity scores可以优化结果。
编辑:python模块gensim
实现了向量空间模型,似乎功能齐全。
NLTK是一个众所周知的自然语言分析框架,为这类工作提供了大量的功能。