TF
:统计文本中每个词的出现频率
IDF
:逆文本评率,这个权重调整参数就是“逆⽂本频率”(IDF),它的⼤⼩与⼀个词的常⻅程度成反⽐。
举个例子:
利用scikit-learn 进行TF-IDF处理
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
corpus=["I come to China to travel",
"This is a car polupar in China",
"I love tea and Apple ",
"The work is to write some papers in science"]
#该类会将⽂本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类⽂本下的词频
vectorizer=CountVectorizer()
#该类会统计每个词语的tf-idf权值
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus)) #CountVectorizer+TfidfTransformer的组合
tfidf.todense() # todense()
#返回矩阵,由⽂本内容转化⽽来的tf-idf权重矩阵
tfidf.todense().shape ##为什么是4行因为输入有4个句子
现在我们⽤TfidfVectorizer⼀步到位,代码如下:
from sklearn.feature_extraction.text import TfidfVectorizer
# TfidfVectorizer类会将⽂本中的词语转换为词频矩阵,并统计每个词语的tf-idf权值,形成tfidf
#权重矩阵
tfidf2 = TfidfVectorizer()
re = tfidf2.fit_transform(corpus)
re.todense() # todense()返回矩阵,由⽂本内容转化⽽来的tf-idf权重矩阵
中文分词
# 分词,使⽤jieba分词库将中⽂⽂本(中⽂句⼦)中的词语分开
# 中⽂不像英⽂,词语之间有空格分割,所以对于中⽂⽂本,我们⾸先要进⾏分词处理,再把它转化。我
# 们这⾥介绍的是采⽤中⽂分词库jieba进⾏分词
import jieba
import numpy as np
text = "我们知道,除了太阳之外,观察距离地球非常遥远的恒星的时候,它们通常只是一个光点, \
而且,似乎感觉不到它们的明显运动,所以,古人就将这类星体称为恒星。 \
而上面所说的这类星体,虽然也呈现出只有一个光点的特点,但是,有着非常明显的辐射和光度变化,有很大的红移现象, \
所以,天文学家将这种类似恒星而并非恒星的天体,称为“类星体”,意即类似恒星的天体。 \
其中,有些类星体因不断向外辐射无线电波,被称为“类星射电源”; \
有些类星体不辐射无线电波,但也具有很大的红移,被称为“蓝星体”。 \
另外,类星体一般都由质量很大的核和核外的气晕构成,少数类星体还会被暗弱的星云物质包围,如3C48; \
有些类星体会喷射小股物质流,如3C273。还有人认为类星体是非常遥远的某类星系中极端明亮的核心。"
sentences = text.split() #默认按照空格和\ 进行分裂
print(sentences)
print(len(sentences))
*
简明 jieba 中文分词教程*
https://www.jianshu.com/p/883c2171cdb5
jieba.cut
#采用中文分词库进行句子词语分列
sentence_word = [list(jieba.cut(sent0)) for sent0 in sentences ] #变成列表外面再套一个列表
print(sentence_word)
print( len(sentence_word ))
现在将每个词连接起来:
#现在将每个句子的分词结果连接起来 ,只是这次的8个句⼦的词语都有1个空格互相隔开了
# 就像英⽂“I will go home"⼀样,jieba分词处理之后、词语之间有了空格
document = [ " ".join(sent0) for sent0 in sentence_word ]
print(document)