ハイファットマンの友人M

ハイファットマンはおともだちです。ほぼメモ

言語処理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