Skip to content

Commit 63ae746

Browse files
List Unlisted Pronunciation
1 parent adfa8a6 commit 63ae746

2 files changed

Lines changed: 1964 additions & 29 deletions

File tree

scripts/list_unlist_pron.py

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from glob import iglob
22
from operator import itemgetter
3-
from itertools import accumulate
43
from collections import defaultdict
54

65
non_han = {*',: '}
@@ -18,9 +17,9 @@ def column_start(column):
1817
for filename in ['char.csv', 'scripts/ignore.csv']:
1918
with open(filename, encoding='utf-8') as f:
2019
assert next(f).startswith('char,jyutping')
21-
listed |= {tuple(line.rstrip('\n').split(',')[:1]) for line in f}
20+
listed |= {tuple(line.rstrip('\n').split(',')[:2]) for line in f}
2221

23-
unlisted = defaultdict(list)
22+
unlisted = defaultdict(lambda: defaultdict(list))
2423
for filename in iglob("*.csv"):
2524
if filename == 'char.csv':
2625
continue
@@ -32,58 +31,49 @@ def column_start(column):
3231
romans_column_index = column_names.index("jyutping")
3332

3433
for line_num, line in enumerate(f, 2):
35-
def yield_chars(chars, start):
34+
def yield_chars(chars):
3635
s = ''
3736
is_punctuation = True
38-
for i, char in enumerate(chars, start):
37+
for char in chars:
3938
if (char in non_han) != is_punctuation:
4039
if s:
4140
if not is_punctuation:
42-
yield (i, s)
41+
yield s
4342
s = ''
4443
is_punctuation = not is_punctuation
4544
if not is_punctuation and s and not (is_ascii_lowercase_letter(char) and is_ascii_letter(s[-1])):
46-
yield (i, s)
45+
yield s
4746
s = ''
4847
s += char
49-
if s:
50-
i += 1
51-
if not is_punctuation:
52-
yield (i, s)
48+
if s and not is_punctuation:
49+
yield s
5350

54-
def yield_romans(romans, start):
51+
def yield_romans(romans):
5552
s = ''
5653
is_space = True
57-
for i, roman in enumerate(romans, start):
54+
for roman in romans:
5855
if (roman == ' ') != is_space:
5956
if s:
6057
if not is_space:
61-
yield (i, s)
58+
yield s
6259
s = ''
6360
is_space = not is_space
6461
s += roman
65-
if s:
66-
i += 1
67-
if not is_space:
68-
yield (i, s)
62+
if s and not is_space:
63+
yield s
6964

7065
columns = line.rstrip('\n').split(',')
71-
columns_start = list(accumulate(map(column_start, columns), initial=0))
7266

7367
if chars_column_index < len(columns) > romans_column_index:
7468
chars_orig = columns[chars_column_index]
7569
romans_orig = columns[romans_column_index]
76-
chars = yield_chars(chars_orig, columns_start[chars_column_index])
77-
romans = yield_romans(romans_orig, columns_start[romans_column_index])
78-
for char_i, char in chars:
79-
try:
80-
roman_i, roman = next(romans)
81-
except StopIteration:
82-
break
83-
if (char, roman) not in listed:
84-
unlisted[(char, roman)].append(f'{filename}:{line_num}')
70+
chars = yield_chars(chars_orig)
71+
romans = yield_romans(romans_orig)
72+
for pair in zip(chars, romans):
73+
if pair not in listed:
74+
unlisted[pair][filename].append(f'{line_num} {chars_orig} {romans_orig}')
8575

8676
with open('scripts/unlisted.csv', 'w', encoding='utf-8') as f:
8777
print('char', 'jyutping', 'location', sep=',', file=f)
8878
for (char, roman), locations in sorted(unlisted.items(), key=itemgetter(0)):
89-
print(char, roman, ';'.join(locations), sep=',', file=f)
79+
print(char, roman, ';'.join(f'{filename}:[{"|".join(dict.fromkeys(lines))}]' for filename, lines in locations.items()), sep=',', file=f)

0 commit comments

Comments
 (0)