2013-08-14

入門自然言語処理(オライリー)の演習問題 解答Part3 [第1章21〜29]

入門自然言語処理の演習問題を解くシリーズの最後です。Part1Part2はこちらです。

第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章)】

    0 件のコメント:

    コメントを投稿