ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: 文字列操作 len()、splitline()、split()、正規化と正規表現

備忘録です。

文字列を操作するための関数をまとめた備忘録。

pandas内の文字列の文字数をカウント len()

こんな感じのアンケートをまとめたデータがあったとして、comment列の文字数を数えたいと思ったときにlen()関数を使うと文字列がカウントできる。

 

# 下記は文字数を数えてデータフレームにlength列を追加するコード
survey['length'] = survey['comment'].str.len()

 

文字列を改行で分割してリスト化splitlines()

 

下記のような文字列があったとする。

words = 'すもも\t名詞,一般,*,*,*,*,すもも,スモモ,スモモ\nも\t助詞,係助詞,*,*,*,*,も,モ,モ\nもも\t名詞,一般,*,*,*,*,もも,モモ,モモ\nも\t助詞,係助詞,*,*,*,*,も,モ,モ\nもも\t名詞,一般,*,*,*,*,もも,モモ,モモ\nの\t助詞,連体化,*,*,*,*,の,ノ,ノ\nうち\t名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ\nEOS\n'

これを改行で分割してリスト化してくれるのがsplitlines()

 

words = words.splitlines()

#> ['すもも\t名詞,一般,*,*,*,*,すもも,スモモ,スモモ',
#> 'も\t助詞,係助詞,*,*,*,*,も,モ,モ',
#> 'もも\t名詞,一般,*,*,*,*,もも,モモ,モモ',
#> 'も\t助詞,係助詞,*,*,*,*,も,モ,モ',
#> 'もも\t名詞,一般,*,*,*,*,もも,モモ,モモ',
#> 'の\t助詞,連体化,*,*,*,*,の,ノ,ノ',
#> 'うち\t名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ',
#> 'EOS']

 

文字列を分割 split()・・・引数なし

上記のインデックス0、つまり「'すもも\t名詞,一般,*,*,*,*,すもも,スモモ,スモモ',」

この部分を分割したい。引数なしでsplitを使うと空白文字で分割。空白文字にはスペースや改行\n, タブ\tが含まれ、連続する空白文字はまとめて処理されるので、それらが混載している場合一度に分割が可能。「,」は分割されない。

 

word = words[0]
word.split() #> ['すもも', '名詞,一般,*,*,*,*,すもも,スモモ,スモモ']

 

正規化・・・unicodeの変換で数値は半角、かなは全角に変換

unicodedataライブラリを使用して文章の正規化を行う

※表現が複数混在して良いことになっているが、混在したままでは不便であるため、どれかに統一することが正規化 (Normalization) 

import unicodedata


content = unicodedata.normalize('NFKC', content)

 

正規表現 re.compile

 

コンパイルオブジェクトを作成して必要な部分をmatchで抜き出す。

import re


pattern = re.compile(r"^.+(文字列+文字列).+$")

# content・・・元の文字列
body = re.match(pattern, content).group(1)

正規表現の記号

「^(ハット)」 行の先頭

「$」      行の末尾

「.」      改行(\n、\r)を除くすべての文字

「+(プラス)」 直前のパターンの1回以上の繰り返しを表します。

「?」      0回か、1回の繰り返し

「()」      カッコ内のパターンにマッチした文字列を後方参照できる