From 1de88d8173e072106ebd65ef66bd0f23579314e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=83=A0=E7=87=95?= <2509165043@student.example.com> Date: Thu, 23 Apr 2026 15:54:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 260423 43(2).py | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ 260423 43.py | 23 +++++++++++ 2 files changed, 123 insertions(+) create mode 100644 260423 43(2).py create mode 100644 260423 43.py diff --git a/260423 43(2).py b/260423 43(2).py new file mode 100644 index 0000000..9af1bd9 --- /dev/null +++ b/260423 43(2).py @@ -0,0 +1,100 @@ +import jieba +import math + +print("=" * 50) +print("实战:jieba分词 + TF-IDF完整流程") +print("=" * 50) + +def simple_tfidf_tokenized(docs, stopwords=None): + """ + 结合分词的TF-IDF实现 + 参数: + docs: 原始文档列表 + stopwords: 停用词集合 + 返回: + vocab, tfidf_matrix + """ + + tokenized = [] + for doc in docs: + words = jieba.cut(doc) + if stopwords: + words = [w for w in words if w not in stopwords and len(w) > 1] + else: + words = [w for w in words if len(w) > 1] + tokenized.append(words) + + vocab_set = set() + for doc in tokenized: + vocab_set.update(doc) + vocab = sorted(list(vocab_set)) + + n_docs = len(tokenized) + tf_matrix = [] + df_dict = {word: 0 for word in vocab} + + for doc in tokenized: + vec = [0] * len(vocab) + for word in doc: + if word in vocab: + idx = vocab.index(word) + vec[idx] += 1 + tf_matrix.append(vec) + + for vec in tf_matrix: + for j, count in enumerate(vec): + if count > 0: + word = vocab[j] + df_dict[word] += 1 + + idf = [] + for word in vocab: + df = df_dict[word] + idf_j = math.log(n_docs / (df + 1)) + 1 + idf.append(idf_j) + + tfidf = [] + for vec in tf_matrix: + tfidf_vec = [vec[i] * idf[i] for i in range(len(vec))] + tfidf.append(tfidf_vec) + + return vocab, tfidf, tokenized + +docs = [ + "Python是一门很棒的编程语言", + "人工智能是未来的发展方向", + "深度学习是机器学习的一个分支", + "Python和Java都是很流行的编程语言" +] + +stopwords = set(["的", "是", "一个", "很", "和", "在", "了"]) + +vocab, tfidf_matrix, tokenized = simple_tfidf_tokenized(docs, stopwords) + +print("文档集合:") +for i, doc in enumerate(docs): + print(f" Doc{i+1}: {doc}") +print() + +print(f"分词结果:") +for i, words in enumerate(tokenized): + print(f" Doc{i+1}: {' / '.join(words)}") +print() + +print(f"词表(共{len(vocab)}个词):") +print(f" {vocab}") +print() + +print("TF-IDF矩阵:") +for i, vec in enumerate(tfidf_matrix): + nonzero = [(vocab[j], round(vec[j], 4)) for j in range(len(vec)) if vec[j] > 0] + print(f" Doc{i+1}: {nonzero}") + +print() + +print("每个文档最重要的词(TF-IDF值最高):") +for i, vec in enumerate(tfidf_matrix): + max_idx = max(range(len(vec)), key=lambda j: vec[j]) + max_score = vec[max_idx] + if max_score > 0: + print(f" Doc{i+1}: '{vocab[max_idx]}' (TF-IDF={max_score:.4f})") \ No newline at end of file diff --git a/260423 43.py b/260423 43.py new file mode 100644 index 0000000..f3a0bff --- /dev/null +++ b/260423 43.py @@ -0,0 +1,23 @@ +documents=[ + "Python是编程语言", + "Java是编程语言", + "Python Python Python" +] +word_list=[] +for doc in documents: + words=doc.split() + for word in words: + if word not in word_list: + word_list.append(word) +vocab=sorted(word_list) +print("词变:",vocab) +bow_vectors=[] +for doc in documents: + words=doc.split() + vector=[words.count(word) for word in vocab] + bow_vectors.append(vector) +for i,vec in enumerate(bow_vectors): + print(f"Doc{i+1}的向量表示:{vec}") + +#两个缺点:忽略词序与语义关系 + #词汇维度爆炸与稀疏性 \ No newline at end of file