RYoTA1209 / NLP-Container

0 stars 1 forks source link

③加算減算システム #11

Open RYoTA1209 opened 3 years ago

RYoTA1209 commented 3 years ago

概要

入力:正規化処理の結果(概念A, 数量Xa)のリスト

出力:未知数xの演算結果

目的

加算減算問題を解くため

タスク

RYoTA1209 commented 2 years ago

同率1位のデータがあるallduplicate_listの最頻出単語を求める時エラーになる対処法!

再現方法

main.py 202行目 quest = quest_list[18][4]で試した見ると以下のエラーが発生する.

例外が発生しました: StatisticsError
no unique mode; found 2 equally common values
  File "/workspace/NLP-Container/main.py", line 139, in get_standard_list
    base_word = (mode(allduplicate_list))
  File "/workspace/NLP-Container/main.py", line 213, in <module>
    standard_list = get_standard_list(normalize_list)

改善案

  1. collections.Counterクラスを作成して、most_common()メソッドを利用して最頻出単語のリストを取得できる。
+ from collections import  Counter

def get_standard_list(normalize_list:list) -> list:
    vectors = Magnitude("chive-1.2-mc5.magnitude")
    standard_list = []
    normalize_word_set = set([normalizeword_tuple[0] for normalizeword_tuple in normalize_list])
    duplicate_list = []
    allduplicate_list = []

    for word in normalize_list:
        # vectors.most_similar(word[0], topn=10)はtuple型のlistである.
        # 単語のリスト化を行う
        word_set = set([word_tuple[0] for word_tuple in vectors.most_similar(word[0], topn=10) ])
        #重複単語のリスト化
        duplicate_list = list((normalize_word_set & word_set))
        allduplicate_list.extend(duplicate_list)
    #allduplicate_listの再頻出単語
-   base_word = (mode(allduplicate_list))
+   base_word = Counter(allduplicate_list).most_common()[0][0]
    for normalize_word in normalize_list:
        standard_list.append((base_word,normalize_word[1],normalize_word[2],normalize_word[3]))
    return standard_list