在csv文件中将相似的句子串组合在一起

Grouping together similar sentence strings in a csv file

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

例如,所有引用 Gmail 的句子,例如:

Gmail login
Gmail account login
Gmail account register

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

  1. 将句子中的每个单词按字母顺序排序并小写,例如:

    帐号gmail登录

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

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

  4. 当dataframe被迭代后,我们再次循环它,并将我们在它自己的列中制作的索引与输入文件中的相应行匹配到return原始句子.

这种方法一直很有前途,但它存在匹配不良和句子不在同一上下文中而最终出现在同一组中的问题。有没有更好的方法可以完成我想做的事情?

有很多方法可以实现文档相似性分析,来自文本 analysis/mining 字段。

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

基本上,使用 inverted file for storing the terms, and perform cosine similarity in the vector model 是检测文档相似性的一种简单有效的方法。

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

编辑:python 模块 gensim 实现了矢量 space 模型,似乎功能齐全。 NLTK 是著名的自然语言分析框架,并为此类工作提供大量功能。