はじめに
これらの横棒、コンピュータにとっては全て違うのですが
見分けがつくでしょうか?
-˗ᅳ᭸‐‑‒–—―⁃⁻−▬─━➖ーㅡ﹘﹣-ー𐄐𐆑
郵便番号、住所、電話番号など、横棒が使われているデータを扱うとき、
人が入力したデータや購入したデータであると、同じ記号が使われていないことはよくあることです。
090-1234-5678
090᭸1234᭸5678
090‑1234‑5678
090−1234−5678
これらの電話番号の文字列も
phone_no_list = ['090-1234-5678', '090᭸1234᭸5678', '090‑1234‑5678', '090−1234−5678']
# 文字をUnicodeコードポイントに変換
for n in phone_no_list:
# 文字列の4番目の横棒の文字コードを見てみる
print(n[3], ord(n[3]))
"""
出力:
- 45
᭸ 7032
‑ 8209
− 8722
"""
このように全て違います。
ハイフンに似ている横棒を全て統一する
今回は、
【 ‾(Overline)】 と 【 _(Low Line/アンダースコア)】のおよそ中間の高さにある横棒を集めて、
これらを一つの記号に統一します
ハイフンに似ている横棒の一覧
まずは、記号を調査しました。
参考にしたサイトはこちらです。
Unicode キャラクター図鑑(https://unicode-table.com/jp/ )
記号 | Unicode コードポイント | Unicode 番号 | entity | Unicode 称号 | |
---|---|---|---|---|---|
0 | - | 45 | U+002D | Hyphen-Minus (半角マイナス) | |
1 | ˗ | 727 | U+02D7 | Modifier Letter Minus Sign | |
2 | ᅳ | 4467 | U+1173 | Hangul Jungseong Eu | |
3 | ᭸ | 7032 | U+1B78 | Balinese Musical Symbol Left-Hand Open Pang | |
4 | ‐ | 8208 | U+2010 | ‐ | Hyphen |
5 | ‑ | 8209 | U+2011 | Non-Breaking Hyphen | |
6 | ‒ | 8210 | U+2012 | Figure Dash | |
7 | – | 8211 | U+2013 | – | En Dash |
8 | — | 8212 | U+2014 | — | Em Dash |
9 | ― | 8213 | U+2015 | ― | Horizontal Bar |
10 | ⁃ | 8259 | U+2043 | ⁃ | Hyphen Bullet |
11 | ⁻ | 8315 | U+207B | Superscript Minus | |
12 | − | 8722 | U+2212 | Minus Sign | |
13 | ▬ | 9644 | U+25AC | Black Rectangle | |
14 | ─ | 9472 | U+2500 | Box Drawings Light Horizontal | |
15 | ━ | 9473 | U+2501 | Heavy Minus Sign | |
16 | ➖ | 10134 | U+2796 | Box Drawings Heavy Horizontal | |
17 | ー | 12540 | U+30FC | Katakana-Hiragana Prolonged Sound Mark (全角の長音) | |
18 | ㅡ | 12641 | U+3161 | Hangul Letter Eu | |
19 | ﹘ | 65112 | U+FE58 | Small Em Dash | |
20 | ﹣ | 65123 | U+FE63 | Small Hyphen-Minus | |
21 | - | 65293 | U+FF0D | Fullwidth Hyphen-Minus (全角ハイフン) | |
22 | ー | 65392 | U+FF70 | Halfwidth Katakana-Hiragana Prolonged Sound Mark (半角カナの長音) | |
23 | 𐄐 | 65808 | U+10110 | Aegean Number Ten | |
24 | 𐆑 | 65937 | U+10191 | Roman Uncia Sign | |
25 | 5760 | U+1680 | Ogham Space Mark |
同じ記号に全て統一(Python)
試しに
「あᅳㅡ˗𐆑–᭸‒-─−▬𐄐—━‐‑ー﹣―ー﹘-⁃➖⁻!」
の横棒を「-(半角マイナス)」に統一してみます。
import re
def replace_hyphen(text, replace_hyphen):
"""全ての横棒を半角ハイフンに置換する
Args:
text (str): 入力するテキスト
replace_hyphen (str): 置換したい文字列
Returns:
(str): 置換後のテキスト
"""
hyphens = '-˗ᅳ᭸‐‑‒–—―⁃⁻−▬─━➖ーㅡ﹘﹣-ー𐄐𐆑 '
hyphens = '|'.join(hyphens)
return re.sub(hyphens, replace_hyphen, text)
# 名寄せしたいテキスト
text = 'あᅳㅡ˗𐆑–᭸‒- ─−▬𐄐—━‐‑ー﹣―ー﹘-⁃➖⁻!'
# replace_hyphen に統一する記号を設定
print(replace_hyphen(text, replace_hyphen='-'))
"""
出力:
あ--------------------------!
"""
はい。これで綺麗になりました。
終わりに
以上。
これから名寄せ作業があるかもしれないので、メモを残しました。
他に、似たような横棒があれば教えてください。
データの追加
表に、 (Ogham Space Mark) を追加しました(2021/10/26)
追記:
(2021/10/26)
実際の名寄せでは、
長音や漢字の1を抜いた状態で記号を名寄せして
長音は、長音だけで処理するというのが一般的な方法になるのかなと思います。
そうでないと、住所に含まれているマンション名などの長音が記号になってしまうので。
(2021/11/4)
コメント↓で色々アドバイスいただけたので、そちらも参考にしていただければと思います。