Unicode テキストの語彙アナライザーを作成しています。多くの Unicode 文字には複数のコード ポイントが必要です (正規構成の後でも)。たとえば、 にtuple(map(ord, unicodedata.normalize('NFC', 'ā́')))
評価され(257, 769)
ます。2 つの文字の境界がどこにあるかを知るにはどうすればよいですか? さらに、テキストの正規化されていないバージョンを保存したいと思います。私の入力は Unicode であることが保証されています。
これまでのところ、これは私が持っているものです:
from unicodedata import normalize
def split_into_characters(text):
character = ""
characters = []
for i in range(len(text)):
character += text[i]
if len(normalize('NFKC', character)) > 1:
characters.append(character[:-1])
character = character[-1]
if len(character) > 0:
characters.append(character)
return characters
print(split_into_characters('Puélla in vī́llā vīcī́nā hábitat.'))
これにより、次のように誤って出力されます。
['P', 'u', 'é', 'l', 'l', 'a', ' ', 'i', 'n', ' ', 'v', 'ī', '́', 'l', 'l', 'ā', ' ', 'v', 'ī', 'c', 'ī', '́', 'n', 'ā', ' ', 'h', 'á', 'b', 'i', 't', 'a', 't', '.']
次のように出力されることを期待しています。
['P', 'u', 'é', 'l', 'l', 'a', ' ', 'i', 'n', ' ', 'v', 'ī́', 'l', 'l', 'ā', ' ', 'v', 'ī', 'c', 'ī́', 'n', 'ā', ' ', 'h', 'á', 'b', 'i', 't', 'a', 't', '.']