将 csv 文件中的相似句子字符串分组在一起

Posted

技术标签:

【中文标题】将 csv 文件中的相似句子字符串分组在一起【英文标题】:Grouping together similar sentence strings in a csv file 【发布时间】:2016-08-03 18:41:38 【问题描述】:

我目前正在使用 Python 开发一个依赖于 csv 文件的项目。 csv 文件包含数千个随机句子,某些句子之间存在一些相似性。我的代码的目的是识别哪些句子是同类并在上下文中引用相同的事物。

例如,所有提及 Gmail 的句子,例如:

Gmail login
Gmail account login
Gmail account register

引用相同的上下文,但在输入文件中可能彼此相距很远,嵌套在引用不同上下文的不相关句子之间。到目前为止,我一直在使用的方法是:

    按字母顺序和小写对句子中的每个单词进行排序,例如:

    帐户 gmail 登录

    将它们在文件中的原始索引设为自己的列,在 csv 文件中按字母顺序对句子进行排序,然后将它们加载到 pandas 数据帧中

    遍历数据框并相互比较句子。这是使用FuzzyWuzzy's token_set_ratio 方法来识别彼此匹配的术语(相等 == 100),相似的单词被组合在一起然后写入文件。

    当dataframe被遍历一遍后,我们再循环一遍,将我们在自己的列中建立的索引匹配到输入文件中对应的行,返回原句。

    李>

这种方法一直很有前景,但它会遇到匹配错误和句子不属于同一上下文的问题,最终会出现在同一组中。有没有更好的方法可以做我想做的事?

【问题讨论】:

【参考方案1】:

有很多方法可以实现文档相似性分析,来自文本分析/挖掘领域。

在您的情况下,您似乎拥有标准化的单词文档(行)。然后,您可以执行文档比较,而无需通过列文斯坦距离的三元相似度来比较单词。

基本上,使用inverted file 来存储术语,执行cosine similarity in the vector model 是检测文档相似性的一种简单有效的方法。

使用其他一些技术或distance/similarity scores,可以优化结果。

编辑:一个 python 模块,gensim,实现了向量空间模型,似乎功能很好。 NLTK 是著名的自然语言分析框架,并为此类工作提供了大量功能。

【讨论】:

以上是关于将 csv 文件中的相似句子字符串分组在一起的主要内容,如果未能解决你的问题,请参考以下文章

使用 TF-IDF 加权的空间向量模型实现句子相似度计算

给定 csv 文件,我需要根据相似度得分打印那些最相似的句子

根据 .dat 文件中的相似文本将行类别分组到列表中

如何使用聚类对具有相似意图的句子进行分组?

在 Node.js 中对数组中的相似字符串进行分组

在python中将相似的字符串分组为单个组[重复]