You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:38:47