自然语言处理-文本表示-one-hot-编码

  1. 如何通过向量化的方式表示单词
     ①、采用独热编码的方式,对词汇进行编码
  2. 如何表示句子
     ②、Boolean vector:先对句子进行分词,然后按照词典中的向量对句子中的词汇是否出现,进行编码。该方法的缺点:只记录了句子中的词汇是否出现,并没有记录词汇出现的次数,也没有考虑到一个单词的重要性。
     ③、Count vector:先对句子进行分词,然后按照字典中的向量对句子中的词汇出现次数进行编码。
     ④、TF-IDF向量表示:句子中并不是出现的越多的单词就越重要的。
    公式:tfidf(w) = tf(d, w) * idf(w)。
    前半部分: 在一个文档d中w出现的个数
    后半部分: N:语料库中的文档总数,语料库中包含多少个句子或多少个文本。N(w),表示w单词在多少个文档中出现了。加log是为了减小单词之间的差异。
    **=>**假设一个单词在多个文档中都出现了,那么 log N/N(w)的分母就会变大,单词的重要性指标就会变小。例:有100个文档,其中100个文档都出现了"的"这个词, 10个文档出现了"古诗词"这个词。那么idf(w = “的”) = log(100/100), idf(w = “古诗词”) = log(100/10). 就能发现"古诗词"的重要性会比"的"的重要性要高一些。

count vector 代码如下:

# 导入词向量的包
from sklearn.feature_extraction.text import CountVectorizer

corpus = [
    "泽兰逢春茂盛芳馨,桂花遇秋皎洁清新。",
    "兰桂欣欣生机勃发,春秋自成佳节良辰。",
    "谁能领悟山中隐士,闻香深生仰慕之情?",
    "花卉流香原为天性,何求美人采撷扬名。"
]
corpus_2 = [
    "兰花到了春天枝叶茂盛,桂花遇秋天则皎洁清新。兰桂欣欣向荣生机勃发,所以春秋也成了佳节良辰。可是谁能领悟山中隐士,见到此情此景而产生的仰慕之情?花木流香原为天性,它们并不求美人采撷扬名。"
]

# 设置停用词,过滤掉标点符号
stop_words = [",", "。", "?"]
# 创建分词列表集合
split_list = []
# 导入jieba分词,对语料库进行分词

import jieba

for i in range(len(corpus)):
    set_list = jieba.cut(corpus[i], cut_all=False)
    split_list = split_list + ",".join(set_list).split(",")

# split_list = 过滤掉标点符号
filtered_words = [word for word in split_list if word not in stop_words]

# 构建CountVectorizer对象
vectorizer = CountVectorizer()
# 生成文档的count vector
X = vectorizer.fit_transform(filtered_words)
# 打印词典库
print(vectorizer.get_feature_names())
# 打印每个文档的向量
print(X.toarray())

実行结果:
[‘之情’, ‘仰慕’, ‘何求’, ‘佳节’, ‘兰桂’, ‘原为’, ‘天性’, ‘山中’, ‘扬名’, ‘春秋’, ‘桂花’, ‘欣欣’, ‘泽兰’, ‘流香’, ‘深生’, ‘清新’, ‘生机勃发’, ‘皎洁’, ‘美人’, ‘自成’, ‘良辰’, ‘花卉’, ‘芳馨’, ‘茂盛’, ‘逢春’, ‘遇秋’, ‘采撷’, ‘闻香’, ‘隐士’, ‘领悟’]
[[0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

你可能感兴趣的:(自然语言处理,自然语言处理,python,tf-idf)