首页 > 解决方案 > 如何用 Python 处理类似的符号?

问题描述

我有关键字列表及其相应的搜索量作为 CSV 文件。关键字是德语。一些关键字是唯一的,其他关键字的符号略有不同,如本例所示:

+--------------------------------------+-----+
| verkehrsrechtsschutz rückwirkend     | 50  |
+--------------------------------------+-----+
| verkehrs-rechtsschutz rückwirkend    | 50  |
+--------------------------------------+-----+
| familien rechtsschutzversicherung    | 100 |
+--------------------------------------+-----+
| familienrechtsschutzversicherung     | 100 |
+--------------------------------------+-----+
| privat rechtsschutz ohne wartezeit   | 20  |
+--------------------------------------+-----+
| privater rechtsschutz ohne wartezeit | 20  |
+--------------------------------------+-----+
| rechtsschutzversicherung strafrecht  | 80  |
+--------------------------------------+-----+
| strafrechtsschutz                    | 80  |
+--------------------------------------+-----+
| rechtsschutzversicherung gewerbe     | 200 |
+--------------------------------------+-----+
| rechtsschutzversicherung gewerblich  | 200 |
+--------------------------------------+-----+
| fahrer rechtsschutz                  | 160 |
+--------------------------------------+-----+
| fahrerrechtsschutz                   | 160 |
+--------------------------------------+-----+
| fahrer-rechtsschutz                  | 160 |
+--------------------------------------+-----+

类似的关键字通常具有相同的数量 - 但并非总是如此。

我正在寻找一种将所有具有相似符号的关键字移动到另一个文件中的方法。

我想,它可以用 Python 完成,但不知道,什么模块、包或库具有这种特殊的语言处理能力来识别相似的符号并决定彼此之间的关键字关系。

请指出我正确的方向。

更新:由于德语结构的原因,计算相似率的解决方案将产生大量的误报和误报。我想的是一种工具,它“了解”德语语言学并使用一种语言而不是字符串差异。也许像https://pypi.org/project/textblob-de/https://spacy.io/models/de或来自https://github.com/adbar/German-NLP的东西

我已经在尝试一些计算字符串差异的工具——一些 VBA 和 Google App 脚本,它们都失败了。

标签: pythonnlp

解决方案


使用difflib 模块的 SequenceMatcher 类,您可以得到两个字符串的相似程度:

from difflib import SequenceMatcher
s1 = 'rechtsschutzversicherung gewerbe'
s2 = 'rechtsschutzversicherung gewerblich'
print( SequenceMatcher(a=s1, b=s2).ratio() ) # Prints 0.9253731343283582

s3 = 'fahrer rechtsschutz'
print( SequenceMatcher(a=s1, b=s3).ratio() ) # Prints 0.47058823529411764

推荐阅读