<jupyter_start><jupyter_text>Bag of Words1つ前のノートブックでは、one-hotエンコーディングを取得する方法を紹介しました。このノートブックでは、bag of wordsを使う方法について確認します。<jupyter_code>documents = [
    "Dog bites man.",
    "Man bites dog.",
    "Dog eats meat.",
    "Man eats food."
]
processed_docs = [doc.lower().replace(".", "") for doc in documents]
processed_docs<jupyter_output><empty_output><jupyter_text>scikit-learnのCountVectorizerを使うと、bag of wordsを簡単に作れます。<jupyter_code>from sklearn.feature_extraction.text import CountVectorizer

# 文書のリストを確認
print("Our corpus: ", processed_docs)

count_vect = CountVectorizer()
# BoW表現の構築
bow_rep = count_vect.fit_transform(processed_docs)

# ボキャブラリの確認
print("Our vocabulary: ", count_vect.vocabulary_)

# 最初の2つの文書に対するBoWを確認
print("BoW representation for 'dog bites man': ", bow_rep[0].toarray())
print("BoW representation for 'man bites dog': ", bow_rep[1].toarray())

# 新しいテキストに対するBoWを取得
temp = count_vect.transform(["dog and dog are friends"])
print("BoW representation for 'dog and dog are friends': ", temp.toarray())<jupyter_output>Our corpus:  ['dog bites man', 'man bites dog', 'dog eats meat', 'man eats food']
Our vocabulary:  {'dog': 1, 'bites': 0, 'man': 4, 'eats': 2, 'meat': 5, 'food': 3}
BoW representation for 'dog bites man':  [[1 1 0 0 1 0]]
BoW representation for 'man bites dog':  [[1 1 0 0 1 0]]
BoW representation for 'dog and dog are friends':  [[0 2 0 0 0 0]]<jupyter_text>上のコードでは、単語の頻度を考慮してテキストを表現しています。しかし、頻度を気にせず、ある単語がテキストに出現するかどうかだけを知りたい場合もあります。その場合、各文書は0と1のベクトルで表されます。このようなベクトルは、CountVectorizerのオプションであるbinary=Trueを使うことで作成できます。<jupyter_code># 2値ベクトルによるBoW
count_vect = CountVectorizer(binary=True)
bow_rep_bin = count_vect.fit_transform(processed_docs)
temp = count_vect.transform(["dog and dog are friends"])
print("Bow representation for 'dog and dog are friends': ", temp.toarray())<jupyter_output>Bow representation for 'dog and dog are friends':  [[0 1 0 0 0 0]]<jupyter_text>テキスト分類に対してBoW表現を使う方法は、第４章で紹介します。<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12644836272040302, 'fraction_numerical': 0.019143576826196475, 'mean_word_length': 7.275, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '244678', 'license': 'MIT', 'n_tokens_mistral': 957, 'n_tokens_neox': 869, 'n_words': 171, 'path': 'ch03/02_Bag_of_Words.ipynb', 'repo_name': 'oreilly-japan/practical-nlp-ja', 'size': '1985'}