如何改进Python字符串匹配代码以识别‘Jakarta Barat’而非‘Jakarta’
解决多词城市名匹配问题
原代码的问题在于将推文拆分为单个单词逐一匹配,无法识别Jakarta Barat这类由多个单词组成的城市名。以下是优化后的实现:
优化思路
- 优先匹配更长的城市名,避免短城市名(如
Jakarta)先被匹配,导致多词城市名被忽略 - 直接在完整推文文本中查找城市名,无需拆分单词
- 统一文本大小写,解决大小写不一致导致的匹配失败问题
优化后代码
def check_keterangan(row): # 获取推文文本,统一转为小写消除大小写影响 tweet_text = row['Tweet'].lower() # 将城市列表按名称单词数量从多到少排序,优先匹配多词城市名 sorted_cities = sorted(kota['kabko'], key=lambda x: len(x.split()), reverse=True) # 遍历排序后的城市列表 for city in sorted_cities: # 城市名同步转小写,和推文文本格式统一 if city.lower() in tweet_text: return city # 未匹配到任何城市名时返回原字段值 return row['kota']
关键说明
- 排序城市列表:通过
len(x.split())统计城市名的单词数量,按降序排序,确保Jakarta Barat这类多词城市名先被检查,避免被短名城市提前匹配覆盖。 - 完整文本匹配:直接使用字符串包含操作
in,无需拆分推文,能完整识别连续的多词城市名。 - 大小写统一:将推文和城市名同步转为小写,避免因大小写差异(如
Jakarta Barat和jakarta barat)导致的匹配失败。
内容的提问来源于stack exchange,提问作者Mr_G_20
相关产品推荐
相关产品推荐

