"""
37.Top 10 Wörter, die häufig zusammen mit "Katze" vorkommen
Zeigen Sie 10 Wörter an, die häufig zusammen mit "cat" (hohe Häufigkeit des gemeinsamen Auftretens) und deren Häufigkeit des Auftretens in einem Diagramm (z. B. einem Balkendiagramm) vorkommen.
sentence_list:
[[{'surface': '', 'base': '*', 'pos': 'BOS/EOS', 'pos1': '*'},
{'surface': 'einer', 'base': 'einer', 'pos': 'Substantiv', 'pos1': 'Nummer'},
{'surface': '', 'base': '*', 'pos': 'BOS/EOS', 'pos1': '*'}],
[{'surface': '', 'base': '*', 'pos': 'BOS/EOS', 'pos1': '*'},
{'surface': 'ich', 'base': 'ich', 'pos': 'Substantiv', 'pos1': '代Substantiv'},
{'surface': 'Ist', 'base': 'Ist', 'pos': 'Partikel', 'pos1': '係Partikel'},
{'surface': 'Katze', 'base': 'Katze', 'pos': 'Substantiv', 'pos1': 'Allgemeines'},
{'surface': 'damit', 'base': 'Ist', 'pos': 'Hilfsverb', 'pos1': '*'},
{'surface': 'Gibt es', 'base': 'Gibt es', 'pos': 'Hilfsverb', 'pos1': '*'},
{'surface': '。', 'base': '。', 'pos': 'Symbol', 'pos1': 'Phrase'},
{'surface': '', 'base': '*', 'pos': 'BOS/EOS', 'pos1': '*'}],
Memo:
-Häufigkeit des gleichzeitigen Auftretens: https://www.jtp.co.jp/techport/2018-04-18-001/
"""
from collections import defaultdict
from typing import List
import matplotlib.pyplot as plt
import utils
plt.style.use("ggplot")
plt.rcParams["font.family"] = "Hiragino Mincho ProN" #Japanische Unterstützung
def get_co_occurrence(sentence_list: List[List[dict]]) -> list:
sents = [
[word["surface"] for word in sent[1:-1]] for sent in sentence_list
] # [['einer'], ['ich', 'Ist', 'Katze', 'damit', 'Gibt es', '。']]
counter = defaultdict(int)
for sent in sents:
if "Katze" in sent:
for word in sent:
counter[word] += 1
del counter["Katze"]
sorted_counter = {
k: v for k, v in sorted(counter.items(), key=lambda item: item[1], reverse=True)
}
return list(sorted_counter.items())
def plot_co_occurrence(x: list, y: list) -> None:
x_pos = [i for i, _ in enumerate(x)]
plt.bar(x, y)
plt.xlabel("Term")
plt.ylabel("Frequency")
plt.title("Co-occurrence with 'Katze'")
plt.xticks(x_pos, x)
plt.show()
sentence_list = utils.read_json("30_neko_mecab.json")
counter = get_co_occurrence(sentence_list)
# [('von', 391), ('Ist', 272), ('、', 252), ('Zu', 250), ('Zu', 232)]
x = [word[0] for word in counter[:10]]
y = [word[1] for word in counter[:10]]
plot_co_occurrence(x, y)
# ![image-20200527193140109](https://raw.githubusercontent.com/LearnXu/images/master/imgs/image-20200527193140109.png)
Recommended Posts