发布时间:2023-03-28 14:30
图源:Text Mining
六大分支:基本流程(Basic Procedure)、图(Graph)、文档(Document)、词嵌入(Word Embedding)、序列标注(Sequential Labeling)、NLP基本假设(NLP Basic Hypothesis)
1、标准开放公开测试数据集
比如国内的中文汉语有搜狗语料、人民日报语料;国际English的有stanford的语料数据集、semavel的数据集等。
2、爬虫抓取
获取网络文本,主要是获取网页HTML的形式,利用网络爬虫在相关站点爬取目标文本数据。
1、数据清洗
对于爬虫爬取的HTML原始文本,需要进行数据清洗过滤掉标签文本。网页中存在很多不必要的信息,比如说一些广告,导航栏,html、js代码,注释等。我们并不感兴趣的信息,可以delete掉,如果是需要正文提取,可以利用标签用途、标签密度判定、数据挖掘思想、视觉网页块分析技术等等策略抽取出正文。
2、分词
对于中文文本数据,比如一条中文的句子,词语词之间是连续的,而数据分析的最小单位粒度我们希望是词语,所以我们需要进行分词工作,这样就给下一步的工作做准备。
3、词性标注(可选)
词性标注POS的目的是为了让句子在后面的处理中融入更多的有用的语言信息。词性标注是一个经典的序列标注问题。不过对于有些文本处理任务,词性标注不是非必需的。
4、去停用词
停用词stopword是指那些对文本特征没有任何贡献作用的词语,比如:啊、的、是的、你、我、…………还有一些标点符号,这些我们不想在文本分析的时候引入,因此需要去掉,这些词就是停用词。
自定义分词函数
def splitSentence(inputFile, outputFile):
stopwords = {}
with open('D:/python/dachuang/wenbenwajue/bejing_data/beijing/beijing_data/stopword.txt', 'r',encoding='UTF-8') as f:
fstop = f.readlines()
fin = open(inputFile, 'r',encoding='UTF-8') # 以读的方式打开文件
fout = open(outputFile, 'w+',encoding='UTF-8') # 以写的方式打开文件
for eachWord in fstop:
stopwords[eachWord.strip('\n')] = eachWord.strip('\n')
for eachLine in fin:
line = eachLine.strip() # 去除每行首尾可能出现的空格,并转为Unicode进行处理
line1 = re.sub("[0-9\s+\.\!\/_,$%^*()?;; :-【】+\"\']+|[+——!,;:。?、~@#¥%……&*()]+", "",line)
wordList = list(jieba.cut(line1)) # 用结巴分词,对每行内容进行分词
outStr = ''
for word in wordList:
if word not in stopwords:
outStr += word
outStr += ' '
fout.write(outStr.strip() + '\n') # 将分词好的结果写入到输出文件
fin.close()
fout.close()
(1)count
先将关键的keywords作为文本特征,然后再用此最直接的方式进行句子表示,就是直接统计词频,然后将每一个句子或者文本篇章按照每一个特征出现的频率进行统计,这样处理后将得到句子或者文档对应的一个特征向量,向量的每个元素便是对应特征词的出现频数。
(2)TF-IDF
与count类似,不过对其进行了改进。TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TFIDF,TF词频(Term Frequency),IDF反文档频率(Inverse DocumentFrequency)。TF表示词条,在文档d中出现的频率。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。
1、TF的计算公式如下: T F w = N N w TF_w=\frac{N}{N_w} TFw=NwN其中N_w是在某一文本词条w中出现的次数,N表示该文本总词条数。
2、IDF的计算公式如下: I D F w = l o g ( Y w + 1 Y ) IDF_w=log(\frac{Y_w+1}{Y}) IDFw=log(YYw+1)其中Y是语料库的文档总数,Y_w是包含词条w的文档数,分母加一是为了避免w未出现在任何文档中从而导致分母为0的情况。
3、TF-IDF即将TF和IDF相乘 T F − I D F w = T F w ∗ I D F w TF-IDF_w=TF_w*IDF_w TF−IDFw=TFw∗IDFw
从以上计算公式便可以看出,某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
TF-IDF计算
corpus = traincorpus # 语料库
count_vectorizer = CountVectorizer() # 该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
transformer = TfidfTransformer() # 该类会统计每个词语的tf-idf权值
tfidf = transformer.fit_transform(count_vectorizer.fit_transform(corpus)) # 第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵
word = count_vectorizer.get_feature_names() # 获取词袋模型中的所有词语
weight = tfidf.toarray() # 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
(1)word2vec
(2)glove
DeepNLP的表示学习·词嵌入来龙去脉·深度学习(Deep Learning)·自然语言处理(NLP)·表示(Representation)
https://blog.csdn.net/scotfield_msn/article/details/69075227
在文本挖掘与文本分类的有关问题中,常采用特征选择方法。原因是文本的特征一般都是单词(term),具有语义信息,使用特征选择找出的k维子集,仍然是单词作为特征,保留了语义信息,而特征提取则找k维新空间,将会丧失了语义信息。
在解决一个实际问题的过程中,选择合适的特征或者构建特征的能力特别重要。这成为特征选择或者特征工程。特征选择时一个很需要创造力的过程,更多的依赖于直觉和专业知识,并且有很多现成的算法来进行特征的选择。 对于一个语料而言,我们可以统计的信息包括文档频率和文档类比例,所有的特征选择方法均依赖于这两个统计量。目前,文本的特征选择方法主要有:DF, MI, IG, CHI,WLLR,WFO六种。
KNN、SVM、Naive Bayes、决策树、GBDT、xgboost
K-means、agent、divided、DBSCAN