How to make datas our friends

「エンジニアは発信していくことが責務である」という言葉に感化されて始めた勉強したことを書き留めていく備忘録的なやつ。

Pythonで文章を単語ごとに分解してn番目の単語は最初の1文字をそれ以外は2文字を切り出して連層配列を作成する

背景

言語処理100本ノック 2015を今やっているのでその備忘録的なやつ。

やりたいこと

"Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し、1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成する。

結果

ifで条件分岐をおこないfor文で辞書型のdictに値を流し込む方法で対応しました。

import re
sentense = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
words = re.split('\s', sentense.replace('.', ''))

for i in range (0, len(words)):
    str = words[i]
    if i+1 in (1, 5, 6, 7, 8, 9, 15, 16, 19):
        dict[i + 1] = str[0]
    else:
        dict[i + 1] = str[:2]        

dict
> {1: 'H',
 2: 'He',
 3: 'Li',
 4: 'Be',
 5: 'B',
 6: 'C',
 7: 'N',
 8: 'O',
 9: 'F',
 10: 'Ne',
 11: 'Na',
 12: 'Mi',
 13: 'Al',
 14: 'Si',
 15: 'P',
 16: 'S',
 17: 'Cl',
 18: 'Ar',
 19: 'K',
 20: 'Ca'}

解説/考察

基本的な考え方は前記事で書いた内容そのままです。
024minion.hatenablog.jp

何番目の単語かによって切り取る文字数が違うのでシンプルにif文で対象となる数字を直接手打ちしています。
前回はリスト型を使用していますが、指定が連層配列型だったので今回はpythonの辞書型を使用しています。

if i+1 in (1, 5, 6, 7, 8, 9, 15, 16, 19):
 dict[i + 1] = str[0]
else:
 dict[i + 1] = str[:2]

for文のiが0から始まるのでi+1にして実際の数字と合わせるようにしています。

辞書型についてはここを参照しました。

www.pythonweb.jp