从自由文本中提取城市名称?

机器算法验证 数据挖掘 文本挖掘 自然语言
2022-03-26 07:27:12

我有一组来自网络的免费文本。由于用户在该字段中输入他们的位置,我们有许多未规范化的城市名称。

例如,

“中国上海” “中国,上海”可能意味着同一个城市。

请注意,这与命名实体识别略有不同(应该更容易),因为我们知道在该字段中它只是城市名称/地点。

我的问题是,如何规范化这些自由文本并将它们与我们数据库中的已知城市名称相匹配?我们有一个标准数据库,格式为

城市名称,国家。

我能想到的最好的就是模糊字符串匹配。是否有任何现有的研究/工具可以做到这一点?

2个回答

此任务通常称为 命名实体规范化如果字典中的单词不太接近(就 Levenshtein 距离而言),则模糊字符串匹配可能是一个很好的基线。为此,我过去曾使用过 Python 包fuzzywuzzy

我目前对地点名称进行规范化的方法是使用 api 进行地理编码,例如navitiagoogle map,它们已经处理了规范化过程。

一旦掌握了纬度/经度,我对它们进行反向地理编码,当然总是使用相同的 api 以获得标准化输出。

此外,这些 api 返回的信息不仅仅是规范化的城市名称,还返回允许以唯一标识方式向您的数据库添加行的信息。


作为对另一个答案的反应,让我们用你给出的例子来试试fuzzywuzzy

>>> from fuzzywuzzy import fuzz
>>> a = "Shanghai, China"
>>> b = "China, ShangHai"
>>> fuzz.ratio(a, b)
53
>>> fuzz.partial_ratio(a, b)
53
>>> fuzz.token_sort_ratio(a, b)
100
>>> fuzz.token_set_ratio(a, b)
100

看起来很公平。