Python


カタカナ文字列を切り出す

今回は文書からカタカナ文字列を抽出する処理を行います。
では、早速コードを示します。

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031

#! python coding:utf-8 # 2009 / 6 / 2 : shirao #カタカナを取り出すプログラム(対象はSJIS) import re regkana=re.compile(ur'[ァ-ヶー]+') #カタカナ文字列正規表現 import codecs wd_dict={} #key : カタカナ文字列, value : 出現行 num=0 #行 f=codecs.open("sample_kana.txt", "r", "sjis") #読み込み対象 print "*****line : kana list*****" for line in f: num+=1 print str(num)+" :", #行 kana_list = regkana.findall(line) #その行のカタカナを取り出す(list) for kana in kana_list: #カタカナ全表示 print kana, kana_list = list(set(kana_list)) #重複を消す for kana in kana_list: #カタカナとそれが出現する行 print kana, if wd_dict.has_key(kana): #既出 wd_dict[kana].append(num) else: #新出 wd_dict[kana]=[num] print "" f.close() #カタカナとその出現行を出力 print "*****kana dict*****" for key in wd_dict.keys(): print key, wd_dict[key]

ポイント

カタカナの正規表現

カタカナを取り出すなら、正規表現を使って切り出すのが手っ取り早いです。 これは、次のようにすれば簡単に作れます。便利ですね。

re.compile(ur'[ァ-ヶー]+') #カタカナ文字列正規表現

マッチングはkanareg.findall(line) で行います。結果として、カタカナのリストを得ます。

重複解消

このプログラムは、行ごとのカタカナ文字列の単純な取り出しの結果と カタカナ文字列がどの行に出現したかを出力します。
単純な取り出しの結果を表示するのは正規表現によるマッチング(findallの結果)を単純に出力するだけですが、 どの行に出現するかを表示する場合は、重複を消して記憶するのが全うです。
重複を消すのは難しくありません。単にlist(set(kana_list))と するだけです(listの必要がないならset(kana_list))) でいいです。

付録

実行例

実際に動かしてみましょう。 動作のためには同じフォルダにsample_kana.txtを置くなどしてファイルを入力します。 今回は例として次のような入力を与えました。これはWikipediaのウィスキーの歴史のテキストです。

ウイスキーが歴史上はじめて文献に登場したのは、1405年のアイルランドである[2]。このときウイスキーは修道士たちによって製造されていた。スコットランドでも1496年に記録が残っている[3]が、実際はウイスキーはこれより数百年も前からあったものと考えられている[要出典]。初めてウイスキーが製造されたのがいつからで、それがどこでだったかはわかっておらず、この時期のアルコール飲料の製造記録は残っていないために推定することはむずかしい。またウイスキーは個別の集団によってそれぞれ独立に発明された可能性もある。
最初に蒸留アルコールが製造されたのは8世紀から9世紀にかけてであり、その場所は中東だった[4]。蒸留の技術は、キリスト教の修道士らによってアイルランドとイギリスにもたらされた[要出典]。
蒸留の技法は収穫後の過剰な穀物を加工する手段として、アイルランドや英国においても(独立に、あるいはアラビアの技術に先立って)農民によって発見されていた可能性がある

これに対する出力を以下に示します。

*****line : kana list*****
1 : ウイスキー アイルランド ウイスキー スコットランド ウイスキー ウイスキー アルコール ウイスキー スコットランド アイルランド ウイスキー アルコール
2 : アルコール キリスト アイルランド イギリス イギリス アイルランド キリスト アルコール
3 : アイルランド アラビア アラビア アイルランド
*****kana dict*****
スコットランド [1]
アイルランド [1, 2, 3]
ウイスキー [1]
アルコール [1, 2]
キリスト [2]
イギリス [2]
アラビア [3]

ソース・入力ファイル

Pythonソースコードと入力例を置いておきます。


プログラムに戻る