---

こんにちは〜

言語処理100本ノック(その2)

第1章の04と05

04.

"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文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

str = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Migh    t Also Sign Peace Security Clause. Arthur King Can."
dict = {}
for i, s in enumerate(str.split()):
    if i + 1 in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
        dict[i] = s[0] # 1文字目
    else:
        dict[i] = s[0:2] # 0文字目から2文字
print(dict)

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

05.

与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,"I am an NLPer"という文から単語bi-gram,文字bi-gramを得よ.

def bi_gram(str_split):
    n_gram = []
    for i in range(0, len(str_split) - 1):
        n_gram.append(str_split[i:i + 2])
    print(n_gram)

str_split = "I am an NLPer".split()
bi_gram(str_split) # 単語bi-gram
# [['I', 'am'], ['am', 'an'], ['an', 'NLPer']]

bi_gram(''.join(str_split)) # 文字bi-gram
# ['Ia', 'am', 'ma', 'an', 'nN', 'NL', 'LP', 'Pe', 'er']

まず単語bi-gram、文字bi-gramがよくわからなかった・・・ 参考↓

d.hatena.ne.jp