我认为这个问题比普通的拼写检查更容易,因为与所有已知的英语单词相比,美国城市的名单很小。
无论如何,这是问题所在: 我有充满城市名称的文本文件;其中一些拼写正确,一些拼写不正确。
我可以使用哪种算法来纠正城市名称的所有拼写错误?
答案 0 :(得分:7)
你真的需要纠正拼写错误,或者只是用正常的拼写检查器标记它们吗?如果是后者,您只需要获得正确拼写的列表,并确保每个名称与列表中的名称相同。
如果您想要实际纠正它们,您可能希望使用edit distance的概念来比较拼写错误的字符串与参考列表中的字符串的相似性。然后,您可以使用最接近的匹配替换拼写错误的单词。您可能还希望处理目标城市不在列表中的可能性。
Levenshtein distance维基百科文章是另一个很好的资源。
答案 1 :(得分:3)
首先将正确的城市名称加载到数组中,然后循环浏览文件中的城市名称。通过查看当前城市名称是否在正确名称数组中来检查当前城市名称是否拼写正确。如果它不在数组中,请尝试将拼写错误的单词的Soundex或Metaphone值与正确名称数组中的单词进行比较,以找到正确的拼写方式。
答案 2 :(得分:2)
诀窍是知道名称实际引用的城市以及 城市名称的拼写方式。这与检查英语单词不同。
你想要解决的真正任务是什么?你在处理地址列表吗?你不应该为此编写自己的工具:整个行业都致力于这个看似简单的任务。 :)
我必须为The Perl Review的订阅列表执行此操作。我已经非常熟悉世界各地邮局的网络服务。您经常可以访问邮政服务网站以获取规范形式的地址。有一些地理编码工具可以为您提供相同的数据。
答案 3 :(得分:0)
我做到了这一点。编辑距离方法就是我所做的,它运行得很好,但实时太慢了。
您将面临的一个挑战是,有许多城市与其他城市名称相距1个编辑距离。您没有说明文本文件中的名称来自哪里,这会产生很大的不同。在我的情况下,随机的人在城市名称中键入搜索,他们偶尔会拼错他们想要的城市,但他们的拼写错误是一个真正的城市名称。在这种情况下,您必须对用户意图进行一些猜测,一种简单的方法是考虑提供的状态。
答案 4 :(得分:-1)
网上有常见拼写错误的城市名称(如匹兹堡 h )。除此之外,我和杰里米在一起。你只需找到城市名称数据集,你可能想尝试USGS。 Zillow有你可以使用的邻域数据。
答案 5 :(得分:-3)
如果在文件中多次出现相同的城市名称,您可以使用每个城市名称的出现次数,并标记仅出现一次的城市名称。