Notes on pykakasi, mecab-python3, etc.

Notes on pykakasi, mecab-python3, etc.


packages

  • requirements.txt
1pykakasi==1.0
2mecab-python3==0.7
3python-Levenshtein==0.12.0

pykakasi

  • usage

H is hiragana, K is katakana, A is alphabet

1import pykakasi.kakasi as kakasi
2
3kakasi = kakasi()
4kakasi.setMode("H","a") # default: Hiragana -> Roman
5kakasi.setMode("K","a") # default: Katakana -> Roman
6kakasi.setMode("J","a") # default: Japanese -> Roman
7kakasi.setMode("r","Hepburn") # default: use Hepburn Roman table
8kakasi.setMode("s", True) # default: Separator
9kakasi.setMode("C", True) # default: Capitalize
10conv = kakasi.getConverter()  # instantiate Converter
11result = conv.do(text)  # romanize

mecab-python

Python wrapper for MeCab.

MeCab on docker

  • Dockerfile
1RUN apt-get update \
2    && apt-get install -y mecab \
3    && apt-get install -y libmecab-dev \
4    && apt-get install -y mecab-ipadic-utf8\
5    && apt-get install -y git\
6    && apt-get install -y make\
7    && apt-get install -y curl\
8    && apt-get install -y xz-utils\
9    && apt-get install -y file\
10    && apt-get install -y sudo\
11    && apt-get install -y wget
12
13RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git\
14    && cd mecab-ipadic-neologd\
15    && bin/install-mecab-ipadic-neologd -n -y
16
17RUN apt-get install -y software-properties-common vim
18RUN add-apt-repository ppa:jonathonf/python-3.6
19RUN apt-get update
20
21RUN apt-get install -y build-essential python3.6 python3.6-dev python3-pip python3.6-venv
22RUN python3.6 -m pip install pip --upgrade
23RUN pip install mecab-python3
  • Output format

Surface form\tPart of speech,Part of speech sub-classification 1,Part of speech sub-classification 2,Part of speech sub-classification 3,Conjugation type,Conjugated form,Base form,Reading,Pronunciation

Output result processing

1import MeCab
2text = "慶應義塾大学湘南藤沢キャンパス"
3T = MeCab.Tagger("")
  • Tuple of surface form + other information
1parsed = [[l.split('\t')[0], tuple(l.split('\t')[1].split(','))] for l in T.parse(text).splitlines()[:-1]]
1[['慶應義塾', ('名詞', '固有名詞', '組織', '*', '*', '*', '慶應義塾', 'ケイオウギジュク', 'ケイオーギジュク')],
2 ['大学', ('名詞', '一般', '*', '*', '*', '*', '大学', 'ダイガク', 'ダイガク')],
3 ['湘南', ('名詞', '固有名詞', '地域', '一般', '*', '*', '湘南', 'ショウナン', 'ショーナン')],
4 ['藤沢', ('名詞', '固有名詞', '地域', '一般', '*', '*', '藤沢', 'フジサワ', 'フジサワ')],
5 ['キャンパス', ('名詞', '一般', '*', '*', '*', '*', 'キャンパス', 'キャンパス', 'キャンパス')]]
  • Tuple of all information

Split all at once with re

1import re
2parsed = [tuple(re.split(r"[\t,]", l)) for l in T.parse(text).splitlines()[:-1]]
1[('慶應義塾', '名詞', '固有名詞', '組織', '*', '*', '*', '慶應義塾', 'ケイオウギジュク', 'ケイオーギジュク'),
2 ('大学', '名詞', '一般', '*', '*', '*', '*', '大学', 'ダイガク', 'ダイガク'),
3 ('湘南', '名詞', '固有名詞', '地域', '一般', '*', '*', '湘南', 'ショウナン', 'ショーナン'),
4 ('藤沢', '名詞', '固有名詞', '地域', '一般', '*', '*', '藤沢', 'フジサワ', 'フジサワ'),
5 ('キャンパス', '名詞', '一般', '*', '*', '*', '*', 'キャンパス', 'キャンパス', 'キャンパス')]

MeCab: Wakati-gaki (Word separation)

1import MeCab
2wakati = MeCab.Tagger("-Owakati")
3wakati.parse("慶應義塾大学湘南藤沢キャンパス").split()

Chasen style

1chasen = MeCab.Tagger("-Ochasen")
2print(chasen.parse("pythonが大好きです"))
1python python  python 名詞-固有名詞-組織
2が   ガ    が   助詞-格助詞-一般
3大好き ダイスキ 大好き 名詞-形容動詞語幹
4です  デス   です  助動詞 特殊・デス 基本形
5EOS

Others

  • Output reading with -Oyomi option. However, words are not separated.