有没有可能找到或匹配两个有不同特殊字符的名字

2024-09-28 17:03:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用我的django应用程序的openstreetmapsapi来填充一个州的城市。数据库里已经有一些城市了。 我面临着重复数据的问题,因为城市中的名字有时有特殊的字符。你知道吗

例如,在国家Turkey,州Bursa有城市Gursu。 我的数据库有一个名为Gürsu的城市对象。 Openstreet地图API中的城市名称是Gürsü。 我试图找到一个解决方案,以匹配现有的城市与特殊字符的名称,并更新它,如果它存在。这样我就可以避免重复。你知道吗


Tags: 数据对象django名称数据库应用程序国家名字
2条回答

首先,它们不一样,它们有不同的ASCII值。 但是如果你想匹配üu 你需要为此工作一点你组类似的字符,你认为在一个类似的列表,这是一个粗略的解决方案,你可以相应地修改

import difflib
similar_groups=[['ü','u']] #add similar special characters here
country = 'Gursu'
country_b = 'Gürsü'
output_list = list(set([li[-1:] for li in difflib.ndiff(country, country_b) if li[0] != ' ']))
match=False #keep false for match found
print(output_list)
for val in similar_groups:
    if(sorted(output_list)==sorted(val)):
        match=True
    else:
        match=False

if match:
    print("Equal")
    #update or skip your stuff here

涉及的解决方案是根据UAX#10匹配文本。您可以在数据库或Python(可能使用PyICU)中执行此操作。下面是一些简短的代码:

#!/usr/bin/env perl
use 5.010;
use utf8;
use open qw(:std :encoding(UTF-8));
use Unicode::Collate qw();

my $c = Unicode::Collate->new(normalization => undef, level => 1);
my @g = qw(Gursu Gürsu Gursü Gürsü);

for my $o (@g) {
    for my $i (@g) {
        say "$i matches $o" if -1 != $c->index($o, $i, 0);
    }
}

__END__
Gursu matches Gursu
Gürsu matches Gursu
Gursü matches Gursu
Gürsü matches Gursu
Gursu matches Gürsu
Gürsu matches Gürsu
Gursü matches Gürsu
Gürsü matches Gürsu
Gursu matches Gursü
Gürsu matches Gursü
Gursü matches Gursü
Gürsü matches Gursü
Gursu matches Gürsü
Gürsu matches Gürsü
Gursü matches Gürsü
Gürsü matches Gürsü

相关问题 更多 >