Python 3.x NLP项目求助:基于词汇表生成文档向量
生成文档向量的解决方案
嘿,我来帮你搞定这个基于词汇表生成文档向量的需求!这在NLP里是基础操作,咱们用Python来实现超简单。
首先,核心思路是:针对每个文档,遍历你的词汇表,统计每个单词在该文档中的出现次数,最终得到一个和词汇表长度一致的向量——向量的每个位置对应词汇表中对应单词的出现频次(如果用One-Hot的话就是0/1,但词频通常更有用)。
下面直接上代码示例,你可以直接套用:
# 假设你的词汇表是这样的(替换成你实际的词汇表) vocab = ['war', 'life', 'travel', 'live', 'peace', 'love'] # 你的文档集合(示例) Doc_POS_words = [ ['war', 'life', 'travel', 'live'], ['life', 'peace', 'love', 'love'], # ... 剩下的98份文档 ] def generate_doc_vectors(documents, vocab): doc_vectors = [] for doc in documents: # 初始化一个全0向量,长度和词汇表一致 vector = [0] * len(vocab) for word in doc: if word in vocab: # 找到单词在词汇表中的索引,对应位置计数+1 idx = vocab.index(word) vector[idx] += 1 doc_vectors.append(vector) return doc_vectors # 生成所有文档的向量 document_vectors = generate_doc_vectors(Doc_POS_words, vocab) # 打印第一份文档的向量看看 print("第1份文档的向量:", document_vectors[0])
小提示:
- 如果你的词汇表很大(比如几千上万词),用
vocab.index()会有点慢,建议先把词汇表转成字典,比如vocab_dict = {word: idx for idx, word in enumerate(vocab)},这样查找索引的速度会快很多,修改后的代码里用idx = vocab_dict[word]就行。 - 要是你需要One-Hot向量(只记录单词是否出现,不统计次数),那把
vector[idx] += 1改成vector[idx] = 1就可以了。 - 也可以用scikit-learn里的
CountVectorizer来简化操作,不过上面的手动实现更直观,适合理解原理:from sklearn.feature_extraction.text import CountVectorizer # 需要把文档从单词列表转成空格分隔的字符串 doc_strings = [' '.join(doc) for doc in Doc_POS_words] vectorizer = CountVectorizer(vocabulary=vocab) document_vectors = vectorizer.fit_transform(doc_strings).toarray()
这样处理后,document_vectors里的每个元素就是对应文档的向量啦,完全匹配你的词汇表顺序~
内容的提问来源于stack exchange,提问作者Muhammad Sulaman Toor
相关产品推荐
相关产品推荐

