所有的消息

使用KMeans群集143,000篇文章。

简要概述

数据集中的文章数

阻止语料库

进口nltk
从NLTK导入pos_tag
nltk。干细胞导入PorterStemmer
从NLTK导入word_tokenize
由托收进口柜台
导入的时间
抽梗机= PorterStemmer ()
记号赋予器= nltk.data.load(分词器/ punkt / english.pickle)
Progress = 0 #用于跟踪函数的位置def茎(x):
结束= time.time ()
脏= word_tokenize (x)
令牌= []
word in dirty:
如果word.strip(' . ') == ": #处理错误
通过
Elif re.search(r ' \d{1,} ', word): #摆脱数字
通过
其他:
tokens.append (word.strip (' . '))
全球开始
全球进展
Tokens = pos_tag(Tokens) #
进步+ = 1
stem = ' ' .join(stemmer.stem(key.lower()) for key, value in tokens if value != ' NNP ') #去除专有名词

结束= time.time ()
sys.stdout。写入(' \r{}百分比,{}位置,{}每秒'。格式(str(浮动(进展/ len(文章))),
Str (progress), (1 / (end - start)))) #让我们看看还剩下多少时间
开始= time.time ()
返回茎
开始= time.time ()
文章(“茎”)= articles.content。应用(λx:阀杆(x))
上周日,英国女王伊丽莎白二世(Queen Elizabeth II)近一个月来首次公开露面,缓解了外界对她健康状况的担忧。此前,由于白金汉宫所说的持续感冒,她错过了圣诞节和新年的教堂礼拜。女王将于今年4月年满91岁,她出席了桑德林厄姆的圣玛丽抹大拉教堂的仪式。
近一个月后,女王首次公开露面,减轻了人们对她缺席教堂礼拜后健康状况的担忧,因为她被形容为坚持感冒,她将在…

创建一个词汇

由托收进口柜台
all_words =计数器()
开始= time.time ()
进步= 0
def count_everything (x):
全球开始
全球all_words
全球进展
X = X .split(' ')
对于x中的单词:
all_words[词]+ = 1
进步+ = 1
结束= time.time ()
sys.stdout。写入(' \r{}百分比,{}位置,{}每秒'。格式((str(浮动(进展/ len(文章)))),
(progress), (1 / (end - start)))) .
开始= time.time ()
对于item in articles.茎秆:
count_everything(项)
allwordsdf = pd。DataFrame(columns = [' words ', ' count '])
allwordsdf(“计数”)= pd.Series(列表(all_words.values ()))
allwordsdf['文字']= pd.Series(列表(all_words.keys ()))
allwordsdf。在dex = allwordsdf[‘words’]
nltk。语料库进口的话nltkstem = [stemmer.stem(word) for word in words.words()] #对NLTK语料库中的#单词进行词干处理,使它们等价于#the allwordsdf dataframe中的单词nltkwords = pd.DataFrame() #使用词根为#NLTK的单词创建一个新的数据框架nltkwords = nltkstems“单词”allwordsdf = allwordsdf[allwordsdf[' words '].isin(nltkwords[' words '])] #只保留词根NLTK语料库中的#those

Vectorizing的话

allwordsdf [allwordsdf(“计数”)= = allwordsdf(“计数”).quantile(。4)][10]
从sklearn.feature_extraction。文本导入TfidfVectorizerStopwords = list(allwordsdf[(allwordsdf[' count '] >= allwordsdf[' count '].quantile(.995)) | (allwordsdf[' count '] <= allwordsdf[' count '].quantile(.4))][' words '])Vecvocab = list(allwordsdf[(allwordsdf[' count '] < allwordsdf[' count '].quantile(.995)) & (allwordsdf[' count '] > allwordsdf[' count '].quantile(.4))][' words '])vec = TfidfVectorizer(stop_words = stopwords, vocabulary = vecvocab, tokenizer=None)
vec_matrix = vec.fit_transform(文章(“茎”))

降维

导入截断svdpca = TruncatedSVD (n_components = 100)vec_matrix_pca = pca.fit_transform (vec_matrix)

聚类

从sklearn。集群进口KMeansclf10 = KMeans(n_clusters=10, verbose = 0)clf10.fit (vec_matrix_pca)
labelsdf =文章。groupby([“出版”,'标签']).count ()
pubslist =列表(文章(“出版”).unique ())
labelsdf(“百分比”)= 0
对于索引,在labelsdf.iterrows()中的行:
对于pubslist中的pub:
对于范围(10)中的标签:
试一试:
labelsdf。Loc [(pub, label), ' percentage '] = labelsdf。loc[(酒吧、标签),' id '] / labelsdf.loc[(酒吧),“id”].sum ()
除了:
通过
Labelsdf = Labelsdf [['publication', 'labels', 'percentage']]

如果你向下滚动,这就是停止的地方

一个散漫的结论

Baidu
map