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

时间:2016-04-12 22:38:53

标签: python string csv pandas fuzzy-comparison

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

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

Gmail login
Gmail account login
Gmail account register

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

  1. 按字母顺序对句子中的每个单词进行排序,如下所示:

    帐户gmail登录

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

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

  4. 当数据帧被迭代完毕后,我们再次遍历它,并将我们创建的索引与自己的列匹配到输入文件中的相应行,以返回原始句子。

  5. 这种方法一直很有希望,但它遭受的是不良匹配和句子,而不是同一组中的相同背景。是否有更好的方法可以做我想做的事情?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

编辑:python模块gensim实现了向量空间模型,似乎功能齐全。 NLTK是一个众所周知的自然语言分析框架,为这类工作提供了大量的功能。