给出两个包含字符串的列表。
1. 一个包含世界各地组织(主要是大学)名称的列表 - 不仅用英语书写,而且始终使用拉丁字母表。 2. 另一个列表主要包含完整地址,在这些地址中可能会出现第一个列表中的字符串(组织名称)。
例如:
我的想法是使用一种“距离算法”来计算字符串的相似度。由于我不能仅仅通过
1. 一个包含世界各地组织(主要是大学)名称的列表 - 不仅用英语书写,而且始终使用拉丁字母表。 2. 另一个列表主要包含完整地址,在这些地址中可能会出现第一个列表中的字符串(组织名称)。
例如:
addresses = [
"Department of Computer Science, Katholieke Universiteit Leuven, Leuven, Belgium",
"Machine Learning and Computational Biology Research Group, Max Planck Institutes Tübingen, Tübingen, Germany 72076",
"Department of Computer Science and Engineering, University of Washington, Seattle, USA 98185",
"Knowledge Discovery Department, Fraunhofer IAIS, Sankt Augustin, Germany 53754",
"Computer Science Department, University of California, Santa Barbara, USA 93106",
"Fraunhofer IAIS, Sankt Augustin, Germany",
"Department of Computer Science, Cornell University, Ithaca, NY",
"University of Wisconsin-Madison"
]
organisations = [
"Catholic University of Leuven"
"Fraunhofer IAIS"
"Cornell University of Ithaca"
"Tübingener Max Plank Institut"
]
如您所见,期望的映射如下:
"Department of Computer Science, Katholieke Universiteit Leuven, Leuven, Belgium",
--> Catholic University of Leuven
"Machine Learning and Computational Biology Research Group, Max Planck Institutes Tübingen, Tübingen, Germany 72076",
--> Max Plank Institut Tübingen
"Department of Computer Science and Engineering, University of Washington, Seattle, USA 98185",
--> --
"Knowledge Discovery Department, Fraunhofer IAIS, Sankt Augustin, Germany 53754",
--> Fraunhofer IAIS
"Computer Science Department, University of California, Santa Barbara, USA 93106",
"Fraunhofer IAIS, Sankt Augustin, Germany",
--> Fraunhofer IAIS
"Department of Computer Science, Cornell University, Ithaca, NY"
--> "Cornell University of Ithaca",
"University of Wisconsin-Madison",
--> --
我的想法是使用一种“距离算法”来计算字符串的相似度。由于我不能仅仅通过
if address in organisation
来搜索地址中的组织,因为在不同的地方它们可能会略微有所不同。因此,我的第一个猜测是使用difflib模块,特别是difflib.get_close_matches()
函数,从组织列表中选择最接近每个地址的字符串。但我不太确定结果是否足够准确。尽管我不知道应该设置多高的比率,这似乎是一种相似度度量。
在花费太多时间尝试difflib模块之前,我想问问有经验的人,这是否是正确的方法,还是有更适合的工具/方法来解决我的问题。谢谢!
PS: 我不需要最优解。