니트족 자연 언어 처리 100개 노크:39

6261 단어 Python
우선 주파수를 순서로 바꾸다.
또한log의 설정을 x좌표 y좌표와 함께 도표 제작 함수로 한다.
gridoption도 넣었어요.
출력 결과가 있는지 없는지는 모르겠지만 어쨌든 먼저 높여야 한다(일요일에도 확인해야 한다).
그나저나 우선 아버지의 법칙은 무엇일까...
"""
39. Zipfの法則
単語の出現頻度順位を横軸,その出現頻度を縦軸として,両対数グラフをプロットせよ.
"""

import MeCab
from pprint import pprint
import collections
from n30_execise import maping_morphology
from n31_execise import load_mecab_file
from n36_execise import extract_type_all,extract_frequent_words
from n37_execise import create_words_frequency_graph
import matplotlib.pyplot as plt
import pandas as pd


#  TODO:freq_count 出現頻度の順序化
def freq_to_order(freq_count):

    freq_count = list(freq_count)
    uniq_freq = list(set(freq_count))
    uniq_freq.sort(reverse=True)

    freq_order_list = []

    for index,_uniq in enumerate(uniq_freq):
        for _frequency in freq_count:
            if _uniq == _frequency:
                freq_order_list.append(int(index+1))
            else:
                continue

    return freq_order_list


if __name__ == "__main__":

    # ファイルパス
    mecab_file = "neko.txt.mecab"

    # neko.txt.mecabを読み込む
    mecab_text = load_mecab_file(mecab_file)

    # 形態解析後のマッピングリスト
    analyzed_list = maping_morphology(mecab_text)
    # 表層形だけを取り出したリストを作成する
    surface_list = extract_type_all(analyzed_list)
    # 出現頻度の高い値とその回数を取り出す
    freq_value,freq_count = extract_frequent_words(surface_list)
    print(freq_count)
    freq_order_list = freq_to_order(freq_count)
    print(freq_order_list)
    # グラフ作成
    create_words_frequency_graph(freq_order_list,freq_count,graph='line',title="出現頻度順序と出現頻度の両対数グラフ(Zipfの法則)",xlabel="出現頻度の順序",ylabel="出現頻度",log_log=True,_grid=True)
    # HACK:イメージとしてデータがある場所の上に値が表示されるようにしたい。

결과 내보내기


좋은 웹페이지 즐겨찾기