12

多くの場合、特定の Unicode カテゴリ内のすべての文字を一覧表示する必要があります。例えば:

すべての Unicode コードポイントを反復処理し、目的のカテゴリをテストすることで、このリストを作成できます (Python 3):

[c for c in map(chr, range(0x110000)) if unicodedata.category(c) in ('Ll',)]

または正規表現を使用して、

re.findall(r'\s', ''.join(map(chr, range(0x110000))))

しかし、これらの方法は遅いです。すべての文字を繰り返し処理することなく、カテゴリ内の文字のリストを検索する方法はありますか?

Perl に関する関連質問:特定のプロパティを持つすべての Unicode 文字のリストを取得するにはどうすればよいですか?

4

1 に答える 1

12

これを頻繁に行う必要がある場合は、再利用可能なマップを自分で作成するのは簡単です。

import sys
import unicodedata
from collections import defaultdict

unicode_category = defaultdict(list)
for c in map(chr, range(sys.maxunicode + 1)):
    unicode_category[unicodedata.category(c)].append(c)

そして、そこから、そのマップを使用して、特定のカテゴリの一連の文字に変換し直します。

alphabetic = unicode_category['Ll']

これが起動時間に対してコストがかかりすぎる場合は、その構造をファイルにダンプすることを検討してください。このマッピングをJSONファイルまたは他の解析から辞書への迅速な形式からロードすることはそれほど苦痛ではありません。

マッピングを取得したら、もちろん、カテゴリの検索は一定の時間で行われます。

于 2013-01-09T20:38:37.837 に答える