入門自然言語処理の演習問題を解くシリーズの最後です。Part1、Part2はこちらです。
第21問
print text2[-2:]
第22問
print FreqDist([w for w in set(text4) if len(w) == 4]).keys()
第23問
for w in set(text6):
if w.isupper():
print w
第24問
以下の条件に合うすべての単語を探し出す式を書く。
- a.「ize」で終わる
- b.「z」で終わる
- c.「pt」という文字を含む
- d.先頭が大文字で後が全て小文字(つまりタイトルケース)
【a】
print [w for w in set(text6) if w.endswith('ize')]
【b】
print [w for w in set(text6) if 'z' in w]
【c】
print [w for w in set(text6) if 'pt' in w]
【d】
print [w for w in set(text6) if len(w) > 1 and w.istitle()]
第25問
似たような事を何度もしているのでパス。
第26問
sum([len(w) for w in text1])このPythonコードは何を意味するか?
text1に含まれている全単語の文字数の和を意味する。
これを使ってテキスト中の単語帳の平均を求められるか?
例えば、以下のようにすると単語の平均文字数を求める事ができる。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from __future__ import division
from nltk.book import *
def main():
print sum([len(w) for w in text1]) / len(text1)
if __name__ == '__main__':
main()
ちなみに結果は「3.83041112802」でした。よく使われる英語の単語って以外と文字数少ないんですね。
第27問
語彙サイズという言葉の意味が分からないので、とりあえず単語の数っていう意味として考える。
def vocab_size(text):
text = text.split()
return len(text)
第28問
textをsplitしないと単語の数ではなく文字数になってしまうので注意。
def percent(word, text):
return 100 * text.count(word) / len(text.split())
第29問
set(sent3) < set(text1)を実行。また他のテキストでも実験せよ。この処理の実用的な応用には何があるか?
語彙数の多さを比較していることになるから、あるデータの中から語彙数の多いものや少ないものを抽出できる。
【入門自然言語処理解答(第1章)】