python - 模糊字符串比较

标签 python nlp fuzzy-comparison

我正在努力完成的是一个程序,它读取一个文件并根据原始句子比较每个句子。与原文完全匹配的句子将获得 1 分,完全相反的句子将获得 0 分。所有其他模糊句子将获得介于 1 和 0 之间的评分。

我不确定在 Python 3 中使用哪个操作来完成此操作。

我已经包含了示例文本,其中文本 1 是原始文本,其他前面的字符串是比较。

文本:示例

文字 1:那是一个黑暗而 Storm 的夜晚。我一个人坐在红色的椅子上。我不是一个人,因为我养了三只猫。

文本 20:那是一个阴暗而 Storm 的夜晚。我一个人坐在深红色的椅子上。我并不完全孤单,因为我有三只猫科动物 //应该得分高点,但不是 1

文本 21:那是一个阴暗而 Storm 的夜晚。我一个人坐在深红色的大教堂上。我并不完全孤单,因为我有三只猫科动物 //得分应该低于文本 20

文本 22:我一个人坐在深红色的大教堂上。我并不完全孤单,因为我有三只猫科动物。这是一个阴暗而 Storm 的夜晚。 //得分应该低于文本 21 但不是 0

文本 24:那是一个黑暗而 Storm 的夜晚。我并不孤单。我没有坐在红色的椅子上。我养了三只猫。 //应该得 0 分!

最佳答案

有一个包叫 fuzzywuzzy .通过 pip 安装:

pip install fuzzywuzzy

简单用法:

>>> from fuzzywuzzy import fuzz
>>> fuzz.ratio("this is a test", "this is a test!")
    96

这个包是建立在 difflib 之上的。你问为什么不直接使用它?除了更简单之外,它还有许多不同的匹配方法(如 token 顺序不敏感、部分字符串匹配),使其在实践中更加强大。 process.extract 函数特别有用:从一组中找到最匹配的字符串和比率。从他们的自述文件中:

Partial Ratio

>>> fuzz.partial_ratio("this is a test", "this is a test!")
    100

Token Sort Ratio

>>> fuzz.ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")
    90
>>> fuzz.token_sort_ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")
    100

Token Set Ratio

>>> fuzz.token_sort_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")
    84
>>> fuzz.token_set_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")
    100

Process

>>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
>>> process.extract("new york jets", choices, limit=2)
    [('New York Jets', 100), ('New York Giants', 78)]
>>> process.extractOne("cowboys", choices)
    ("Dallas Cowboys", 90)

关于python - 模糊字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383044/

相关文章:

java - 收集、存储和检索大量数值数据

python - 无法通过 Fabric 在服务器上激活 virtualenv

nlp - 寻找有效的 NLP Phrase Embedding 模型

Lucene.net 模糊短语搜索

python - 在 dotdict 上使用 copy.deepcopy

python - re.sub 字符串 : (? : . ..) 的一部分

java - 从java中的纯文本中提取名称

java - 使用 Lucene 的 StandardTokenizer 时保留标点符号

machine-learning - 给定 2 个多元数据集,识别代表同一实体的记录,这些记录略有不同

sql - SQL模糊联接-MSSQL