2018年09月19日

言語処理100本ノックでPython入門 #71 - 機械学習、ストップワード

  

今日は言語処理100本ノック 2015の第8章・機械学習の問題71に挑戦です。

■ 問題

71. ストップワード
英語のストップワードのリスト(ストップリスト)を適当に作成せよ.さらに,引数に与えられた単語(文字列)がストップリストに含まれている場合は真,それ以外は偽を返す関数を実装せよ.さらに,その関数に対するテストを記述せよ.


■ どうやって解くか

ストップワードとは、言語処理する際にに、あまりにも一般的過ぎるため処理対象から外す単語のことらしいです。適当に作成せよとのことなので。いくつかのサイトを参考にして適当に作成(笑)。きっとこれによって学習結果が変わってくる可能性もあるので、本当ならばもっと吟味する必要があるのかもしれません。このストップワードのリストはStopwordsクラスのなかに、リテラル値で定義。

「引数に与えられた単語(文字列)がストップリストに含まれている場合は真,それ以外は偽を返す関数」を実装せよ.

とのことで、Stopwordsクラスにexistsメソッドを定義しました。このメソッドは静的メソッドにしたかったので、アノテーション @staticmethod を付加しています。

静的メソッドは、自分自身のオブジェクトは受け取る必要はないので、純粋な引数だけを指定しています。

in 演算子で、リストの中に含まれているかどうかを判定しているだけの単純なメソッドです。

■ Pythonのコード

class Stopwords:
    words = ['a', 'about', 'all', 'an', 'and', 'any', 'are', 'as', \
            'at', 'be', 'been', 'but', 'by', 'can', 'could', 'do', \
            'does', 'for', 'from', 'has', 'have', 'he', 'her', 'his', \
            'how', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'made', \
            'make', 'may', 'me', 'my', 'no', 'not', 'of', 'on', 'one', \
            'or', 'out', 'she', 'should', 'so', 'some', 'than', 'that', \
            'the', 'their', 'them', 'there', 'then', 'they', 'this', \
            'those', 'to', 'too', 'us', 'was', 'we', 'what', 'when',\
            'which', 'who', 'with', 'would', 'you', 'your', ''
        ]

    @staticmethod
    def exists(word):
        return word in  Stopwords.words

def test():
    w = 'in'
    print(w, Stopwords.exists(w))
    w = 'what'
    print(w, Stopwords.exists(w))
    w = 'list'
    print(w, Stopwords.exists(w))
    w = 'yes'
    print(w, Stopwords.exists(w))

def main():
    test()

if __name__ == '__main__':
    main()


■ 結果

以下、testメソッドの結果です。

in True
what True
list False
yes False