pip install regex
>>> import regex >>> nihonji = regex.compile(r'(\p{Script=Han}|\p{Script=Hiragana}|\p{Script=Katakana})+') >>> test = "あ㋐アア亜aAあ㋐アア亜aA" >>> nihonji.search(test) <regex.Match object; span=(0, 5), match='あ㋐アア亜'> >>> nihonji.search(test).span() (0, 5) >>> nihonji.search(test).group() 'あ㋐アア亜'
これだと最初にマッチしたものの情報しか返してくれないので,
for
で回してマッチしたものの情報を返すようにしよう.
>>> def nihonji_search(text): res = [] nihonji = regex.compile(r'(\p{Script=Han}|\p{Script=Hiragana}|\p{Script=Katakana})+') pos = 0 while True: nihonji_res = nihonji.search(text) if nihonji_res != None: word = nihonji_res.group() res.append({"word":word, "pos_start":nihonji_res.span()[0]+pos, "pos_end":nihonji_res.span()[1]+pos, "long":len(word)}) start,end = nihonji_res.span() pos += end text = text[end:] continue else: break return res >>> test = "あ㋐アア亜aAあ㋐アア亜aAあ㋐アア亜aA" >>> nihonji_search(test) [{'word': 'あ㋐アア亜', 'pos_start': 0, 'pos_end': 5, 'long': 5}, {'word': 'あ㋐アア亜', 'pos_start': 7, 'pos_end': 12, 'long': 5}, {'word': 'あ㋐アア亜', 'pos_start': 14, 'pos_end': 19, 'long': 5}]
こんなかんじで文字列から日本語文字だけ抽出できるかと思います~
絵文字
絵文字の場合,
qiita.com
にあるようにEmoji
というモジュールでも抽出できるんですよね.
import emoji for i in text: if i in emoji.UNICODE_EMOJI: print(i)
ただ,一文字だけの絵文字の判定で顔文字や記号は判定できないのと,
同じようなことは以上のregex
でもできるわけでして,
>>> p = regex.compile(r'(\p{Emoji_Presentation=Yes}|[\U0001F300-\U0001F5FF]|[\U0001F600-\U0001F64F])+') >>> p.search("\(^ ω^\Ξ/^ω^)/") >>> p.search('☆')
...
顔文字や記号は別ですね...