問. 与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,”I am an NLPer”という文から単語bi-gram,文字bi-gramを得よ
解答例
#ngramの定義
def ngram(n, lst):
#要素(単語であったり、文字であったり)ごとにいくつかに区切って、zip関数に渡す
return list(zip(*[lst[i:] for i in range(n)]))
#対象となる文字列を読み込む
str = 'I am an NLPer'
#単語bi-gramの定義。splitで単語に区切っている
words_bi_gram = ngram(2, str.split())
#文字bi-gramの定義。strを1文字ずつ読み込んで、2つずつzip関数に渡す。
chars_bi_gram = ngram(2, str)
#単語bi-gramと文字bi-gramの結果の表示
print('単語bi-gram:', words_bi_gram)
print('文字bi-gram:', chars_bi_gram)
出力
単語bi-gram: [('I', 'am'), ('am', 'an'), ('an', 'NLPer')]
文字bi-gram: [('I', ' '), (' ', 'a'), ('a', 'm'), ('m', ' '), (' ', 'a'), ('a', 'n'), ('n', ' '), (' ', 'N'), ('N', 'L'), ('L', 'P'), ('P', 'e'), ('e', 'r')]
ポイント
・zip関数を使って、リストを作る
・zip関数はfor loopと一緒に使う。
参考リンク
Python, zip関数の使い方: 複数のリストの要素をまとめて取得
0 件のコメント:
コメントを投稿