python - 与 NLP 匹配的字符串
问题描述
我有两个dataframes
,df1
和df2
, 分别有 ~40,000 行和 ~70,000 行关于 A 国投票站的数据。
这两个数据帧有一些共同的列,如“polling_station_name”、“province”、“district”等,但是df1
有纬度和经度列,而df2
没有,所以我试图string matching
在两个数据帧之间做,所以至少有一些行df2
将提供可用的地理位置。我在进行字符串匹配时阻塞了“区”列。
这是我到目前为止的代码:
import recordlinkage
from recordlinkage.standardise import clean
indexer = recordlinkage.Index()
indexer.block('district')
candidate_links = indexer.index(df1, df2)
compare = recordlinkage.Compare()
compare.string('polling_station_name', 'polling_station_name', method='damerau_levenshtein', threshold=0.75)
compare_vectors = compare.compute(candidate_links, df1, df2)
这产生了大约 12,000 个匹配项,但是我注意到一些投票站名称被错误匹配,因为它们的名称在不同位置时非常相似 - 例如'government girls primary school meilabu'
并且'government girls primary school muzaka'
明显不同,但它们正在匹配。
我认为在这里使用 NLP 可能会有所帮助,看看是否有某些词在数据中出现频率很高,例如'government'
, 'girls'
, 'boys'
, 'primary'
,'school'
等,这样我就可以减少对这些词的重视,而将更多的重点放在meilabu
等等muzaka
。进行字符串匹配,但我不太确定从哪里开始。(作为参考,许多投票站是“政府(即公立)学校”)
任何建议将不胜感激!
解决方案
主题非常广泛,只需注意标准方法:
- TFIDF:词频-逆文档频率通常用作加权因子。
- 使用余弦相似度测量两个句子之间的相似度
推荐阅读
- python - 不能在单个代码单元中运行多个代码
- sql - PostgreSQL JSON 对象总和
- javascript - 如何修复JS中边框角的样式?
- reactjs - 将手势/滑动设置为 false 不起作用 [react-navigation v5]
- ios - Swift:限制对特定框架的访问
- python - 使用 cumsum() 后如何将 '0' 替换为空白,但不应影响其中包含 '0' 的超过 1 位数字值?
- oracle - 如何在 Oracle Apex 的插件匿名代码块中引用 PL/SQL 函数
- scala - 如何解释用大括号括起来的函数值(菊石问题)
- r - R:如何将字符串参数转换为变量?
- angular - RXJS 用暂停/间隔监听