python#2.5 ルビ振り機ver2
みんはやに倣ったルビ振りプログラムです。ver1からの変更点は、8行目で pAll を設定し、for row in f: ブロックの最後の方 (num_listC = []以下) を追加することで、記号を入れないようにした点です。
from pykakasi import kakasi
import regex
import tkinter as tk
import tkinter.filedialog
# 文字種 (ひらがな, 漢字) を判別するメソッド
pHira = regex.compile(r'\p{Script=Hiragana}+')
pKanji = regex.compile(r'\p{Script=Han}+')
pAll = regex.compile(r'[\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}ーa-zA-Z0-9]+')
# 漢字をひらがなに直すメソッド
kakasi = kakasi()
kakasi.setMode('J', 'H')
conv = kakasi.getConverter()
main_results = []
root = tk.Tk()
root.withdraw()
filename = tkinter.filedialog.asksaveasfilename()
root.destroy()
if filename:
pass
else:
print('No file specified')
# ファイルを開く
try:
with open(filename, 'r') as f:
for row in f:
item = row.rstrip()
converted_item = ''
# 何文字目が漢字 or ひらがなか? をリストに格納
num_listA = []
num_listB = []
for i in range(len(item)):
if pHira.match(item[i]) or pKanji.match(item[i]):
num_listA.append(i)
else:
num_listB.append(i)
# item のうち漢字かひらがなの箇所だけ、ひらがなに直す
if len(num_listA) != 0:
stringA = item[num_listA[0]]
# 漢字・ひらがなが連続しているところは一括で変換したい
if len(num_listA) >= 2:
for i in range(len(num_listA)-1):
if num_listA[i+1] - num_listA[i] == 1:
stringA += item[num_listA[i+1]]
else:
stringA += ',' + item[num_listA[i+1]]
list1 = stringA.split(',')
list2 = []
for i in range(len(list1)):
result = conv.do(list1[i])
list2.append(result)
if len(num_listB) != 0:
stringB = item[num_listB[0]]
if len(num_listB) >= 2:
for i in range(len(num_listB)-1):
if num_listB[i+1] - num_listB[i] == 1:
stringB += item[num_listB[i+1]]
else:
stringB += ',' + item[num_listB[i+1]]
list3 = stringB.split(',')
if 0 in num_listA:
if len(list3) < len(list2):
list3.append('')
for item2, item3 in zip(list2, list3):
converted_item += item2 + item3
else:
if len(list2) < len(list3):
list2.append('')
for item3, item2 in zip(list3, list2):
converted_item += item3 + item2
else:
for i in range(len(list2)):
converted_item += list2[i]
else:
converted_item += item
num_listC = []
listC = list(converted_item)
for i in range(len(converted_item)):
if not(pAll.match(converted_item[i])):
num_listC.append(i)
for i in range(len(num_listC)):
listC[num_listC[i]] = ''
new_item = ''.join(listC)
main_results.append(item + '\t' + new_item)
print(item + '\t' + new_item)
# ファイルを開く時のエラー対応
except IOError:
print('ファイルを開くことができません')
root = tk.Tk()
root.withdraw()
filename = tkinter.filedialog.asksaveasfilename()
root.destroy()
if filename:
pass
else:
print('No file specified')
# ファイルを開く
try:
with open(filename, 'a') as f:
for i in range(len(main_results)):
f.write(main_results[i] + '\n')
# ファイルを開く時のエラー対応
except IOError:
print('ファイルを開くことができません')
この記事が気に入ったらサポートをしてみませんか?