Python進行文字預處理(文字分詞,過濾停用詞,詞頻統計,特徵選擇,文字表示)
系統:win7 32位
分詞軟體:PyNLPIR
整合開發環境(IDE):Pycharm
功能:實現多級文字預處理全過程,包括文字分詞,過濾停用詞,詞頻統計,特徵選擇,文字表示,並將結果匯出為WEKA能夠處理的.arff格式。
直接上程式碼:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 功能:PyNLPIR文字預處理 過程:文字分詞,過濾停用詞,詞頻統計,特徵選擇,文字表示 時間:2016年8月25日10:52:43 """ import pynlpir import codecs import math pynlpir.open() #文字分詞 typelist = [u"財經",u"IT",u"健康",u"體育",u"旅遊",u"教育",u"招聘",u"文化",u"軍事"] typetxt = codecs.open('C:\\Users\\Administrator\\Desktop\\txttype.txt', 'a', encoding='utf-8') wordseg_result = codecs.open('C:\\Users\\Administrator\\Desktop\\wordseg_result.txt', 'a',encoding='utf-8') allresult = [] for j in range(1,10): for i in range(10,510): typetxt.write(typelist[j-1] + "\n") s = "" singletext_result = [] print (u'正在對第 %s 個資料夾的第 %s 個文字進行分詞處理.....'%(j,i)) f = codecs.open('C:\\Users\\Administrator\\Desktop\\textmining_experiment2\\Word Segment\\traintxt500\\%d\\%d.txt' % (j,i),'r',"gb18030") for line in f: s += line.strip().encode('utf-8') for item in pynlpir.segment(s): singletext_result.append(item[0]) allresult.append(singletext_result) typetxt.close() print (u'文字類別析出完畢!結果已輸出到desktop的txttype.txt!') #直接打印出結果 #for singletext_result in allresult: # for item in singletext_result: # print item #所有結果寫入一個txt,一行一個文字 for singletext_result in allresult: for item in singletext_result: wordseg_result.write(item+'\t') wordseg_result.write('\n') wordseg_result.close() print (u'分詞完畢!分詞結果已輸出到desktop的wordseg_result.txt!'+'\n') #過濾停用詞 stopwords = [] delstopwords_alltxt = [] st = codecs.open('C:\\Users\\Administrator\\PycharmProjects\\Newtextmining\\File\\stopwords.txt', 'rb',encoding='utf-8') delstopwords_result = codecs.open('C:\\Users\\Administrator\\Desktop\\delstopwords_result.txt' , 'a',encoding='utf-8') for line in st: line = line.strip() stopwords.append(line) print (u'正在過濾停用詞......') for singletext_result in allresult: delstopwords_singletxt = [] for word in singletext_result: word = word.strip() if word not in stopwords: if word >= u'\u4e00' and word <= u'\u9fa5':#判斷是否是漢字 delstopwords_singletxt.append(word) delstopwords_alltxt.append(delstopwords_singletxt) for delstopwords_singletxt in delstopwords_alltxt: for everyword in delstopwords_singletxt: delstopwords_result.write(everyword + '\t') delstopwords_result.write('\n') delstopwords_result.close() print (u'停用詞過濾完畢!已將結果輸出到desktop的delstopwords_result.txt!'+'\n') #統計絕對詞頻統計TF getTF_alltxt_dic = {} getTF_result = codecs.open('C:\\Users\\Administrator\\Desktop\\getTF_result.txt' , 'a',encoding='utf-8') print (u'正在統計TF......') for delstopwords_singletxt in delstopwords_alltxt: getTF_singletxt_dic = {} for everyword in delstopwords_singletxt: everyword = everyword.strip() if everyword in getTF_singletxt_dic: getTF_singletxt_dic[everyword] += 1 else: getTF_singletxt_dic[everyword] = 1 getTF_singletxt_dic = sorted(getTF_singletxt_dic.items(), key=lambda d: d[1], reverse=1) for a, b in getTF_singletxt_dic: if b > 0: getTF_result.write(a + '\t' + str(b) + '\t') getTF_result.write('\n') getTF_result.close() print (u'TF值統計完畢!已將結果輸出到desktop的getTF_result.txt!'+'\n') #特徵選擇 #計算所有類別DF alltext = [] allwords = [] delstopwords_result = codecs.open('C:\\Users\\Administrator\\Desktop\\delstopwords_result.txt' , 'rb',encoding='utf-8') wordlist = [] for line in delstopwords_result: alltext.append(line) words = line.strip('\n').split('\t') for word in words: if word: wordlist.append(word) print u"原始文字詞彙總數:", len(wordlist) print u"文字個數:", len(alltext) print u"詞彙種數:", len(set(wordlist)) print ('\n'+u'正在計算所有類別DF......') word_df = [] for word in set(wordlist): count = 0 for words in alltext: if word in words: count += 1 word_df.append([word, str(count)]) # 儲存形式[word,DF] # 輸出 word_df.sort(key=lambda x: int(x[1]),reverse=True) # 詞頻從大到小排序 b = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_allclass_result.txt', "a", encoding="utf-8") b.truncate() for item in word_df: for word in item: b.write(word+ '\t') b.write( '\n') b.close() b = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_allclass_result.txt', "rb", encoding="utf-8") for line in b: line = line.split('\t') if len(line[0])>1: c = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_allclass_result1.txt', "a", encoding="utf-8") c.write(line[0]+'\t'+line[1]) c.write('\n') c.close() print (u'所有類別DF值統計完畢!已將結果輸出到desktop的DF_allclass_result1.txt!'+'\n') #特徵選擇 #計算單一類別DF print (u'正在計算單一類別DF......') word_df2 = [] d = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_allclass_result1.txt', "rb", encoding="utf-8") for line in d: line = line.split() word = line[0] count_1 = 0 count_2 = 0 count_3 = 0 count_4 = 0 count_5 = 0 count_6 = 0 count_7 = 0 count_8 = 0 count_9 = 0 for words in alltext[0:500]: if word in words: count_1 += 1 for words in alltext[500:1000]: if word in words: count_2 += 1 for words in alltext[1000:1500]: if word in words: count_3 += 1 for words in alltext[1500:2000]: if word in words: count_4 += 1 for words in alltext[2000:2500]: if word in words: count_5 += 1 for words in alltext[2500:3000]: if word in words: count_6 += 1 for words in alltext[3000:3500]: if word in words: count_7 += 1 for words in alltext[3500:4000]: if line[0] in words: count_8 += 1 for words in alltext[4000:4500]: if word in words: count_9 += 1 word_df2.append([word,str(count_1),str(count_2),str(count_3),str(count_4),str(count_5),str(count_6),str(count_7),str(count_8),str(count_9)]) # 儲存形式[word,DF] d.close() # 輸出 e = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_singleclass_result.txt', "a", encoding="utf-8") for item in word_df2: for term in item: e.write(term+'\t') e.write( '\n') e.close() print (u'單一類別DF值統計完畢!已將結果輸出到desktop的DF_singleclass_result.txt!'+'\n') #計算特徵項資訊熵 print (u'正在計算資訊熵......') IG = [] g = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_allclass_result1.txt', "rb", encoding="utf-8") for line in g: line = line.split() word = line[0] word2 = float(line[1]) PC = float(500)/float(4500) PC_1 = float(PC) * 9 Entropy = -(float(PC_1)*float(math.log(PC_1,2))) PT = float(word2)/float(len(alltext)) PT_1 = float(1) - PT h = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_singleclass_result.txt', "rb", encoding="utf-8") lines = h.readline() line = lines[:-1] line = line.split() PCT_evenplus = ( float(line[1]) + float(line[2]) + float(line[3]) + float(line[4]) + float(line[5]) + float(line[6]) + float(line[7]) + float(line[8]) )/float(word2) PCT_evenplus_ = float(1) - float(PCT_evenplus) E1 = - (float(PCT_evenplus) * float(math.log(PCT_evenplus, 2))) E2 = -(float(PCT_evenplus_) * float(math.log(float(PCT_evenplus),2))) exEtropy =float(PT) * float(E1) + float(PT_1) * float(E2) IG_value = float(Entropy) - float(exEtropy) IG.append([word, str(IG_value)]) # 儲存形式[word,IG_value] IG.sort(key=lambda x: float(x[1]), reverse=True) # 詞頻從大到小排序 i = codecs.open('C:\\Users\\Administrator\\Desktop\\IG_value.txt', "a", encoding="utf-8") i.truncate() for item in IG: for word in item: i.write(word + '\t') i.write('\n') i.close() h.close() g.close() print (u'資訊增益值統計完畢!已將結果輸出到desktop的IG_value.txt!'+'\n') print (u'正在選擇特徵詞......') j = codecs.open('C:\\Users\\Administrator\\Desktop\\IG_value.txt', "rb", encoding="utf-8") for line in j: line = line.split() if float(line[1])> -float(10): k = codecs.open('C:\\Users\\Administrator\\Desktop\\FeatureWords.txt', "a", encoding="utf-8") k.write(line[0]) k.write('\n') k.close() j.close() print (u'特徵詞選擇完畢!已將結果輸出到desktop的FeatureWords.txt!'+'\n') f1 = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_allclass_result1.txt', "rb", encoding="utf-8") f2 = codecs.open('C:\\Users\\Administrator\\Desktop\\FeatureWords.txt', "rb", encoding="utf-8") FeatureWords_value = codecs.open('C:\\Users\\Administrator\\Desktop\\FeatureWords_value.txt', "a", encoding="utf-8") dic = {} for line in f1: line =line.strip('\n').split('\t') dic[line[0]]=line[1] f1.close() for word in f2: if word in dic: FeatureWords_value.write(dic[word]+'\t'+dic[word]+'\n') f2.close() FeatureWords_value.close() #文件向量化 print (u'正在進行文字向量化處理......') f1 = codecs.open('C:\\Users\\Administrator\\Desktop\\DF_allclass_result1.txt', "rb", encoding="utf-8") f2 = codecs.open('C:\\Users\\Administrator\\Desktop\\FeatureWords.txt', "rb", encoding="utf-8") FeatureWords_value = codecs.open('C:\\Users\\Administrator\\Desktop\\FeatureWords_value.txt', "a", encoding="utf-8") allfw=[] for line in f1: dic = {} line =line.strip('\n').split('\t') dic[line[0]]=line[1] allfw.append(dic) f1.close() #for dic in allfw: # for k,v in dic.iteritems(): # print k,v fw=[] for line in f2: line=line.strip('\n').split('\t') fw.append(line[0]) f2.close() #for word in fw: # print word for dic in allfw: for word in fw: if word in dic: for k, v in dic.iteritems(): FeatureWords_value.write(k+'\t'+v+'\n') FeatureWords_value.close() feture_word = [] feture_word_dic = {} feture_word_dic2 = {} FeatureWords_value = codecs.open('C:\\Users\\Administrator\\Desktop\\FeatureWords_value.txt', "rb", encoding="utf-8") for line in FeatureWords_value: line = line.split() IDF = math.log(4500/float(line[1]),10) feture_word.append(line[0]) feture_word_dic[line[0]] = line[1] feture_word_dic2[line[0]] = IDF FeatureWords_value.close() getTF_result = codecs.open('C:\\Users\\Administrator\\Desktop\\getTF_result.txt', "rb", encoding="utf-8") all=[] for line in getTF_result: line = line.strip('\n').split('\t') single=[] for words in line: single.append(words) all.append(single) #for single in all: #print single # for word in single: # print word FeatureWords_value = codecs.open('C:\\Users\\Administrator\\Desktop\\FeatureWords_value.txt', "rb", encoding="utf-8") alltext_vector = [] for single in all: # print tmax vector = [] for word in feture_word: if word in single: tmax = single[1] inde=single.index(word) t = single[inde+1] else: t = 0 # print t tf_idf = (float(t)/float(tmax))*float(feture_word_dic2[word]) vector.append(tf_idf) alltext_vector.append(vector) for vector in alltext_vector[0:500]: vector.append('Economy') for vector in alltext_vector[500:1000]: vector.append('IT') for vector in alltext_vector[1000:1500]: vector.append( 'Health') for vector in alltext_vector[1500:2000]: vector.append('PE') for vector in alltext_vector[2000:2500]: vector.append('Travel') for vector in alltext_vector[2500:3000]: vector.append( 'Education') for vector in alltext_vector[3000:3500]: vector.append('Enployment') for vector in alltext_vector[3500:4000]: vector.append('Culture') for vector in alltext_vector[4000:4500]: vector.append('Military') #for vector in alltext_vector: # print vector # for value in vector: # print value data = codecs.open('C:\\Users\\Administrator\\Desktop\\data.arff', "a", encoding="utf-8") data.truncate() data.write(u'@relation'+' '+u'sougoucorpus'+'\n\n') for everyword in feture_word: data.write(u'@attribute'+ ' '+ everyword +' '+u'numeric\n') data.write(u'@attribute type {Economy,IT,Health,PE,Travel,Educaiton,Enployment,Culture,Military}\n\
[email protected]\n') for vector in alltext_vector: for value in vector[:-1]: data = codecs.open('C:\\Users\\Administrator\\Desktop\\data.arff', "a", encoding="utf-8") data.write(str(value) + ',') data.write(str(vector[-1]) + '\n') data.close() print (u'文字向量化處理完畢!已將結果輸出到desktop的data.arff!'+'\n') print (u'文字預處理結束!'+'\n')
相關推薦
Python進行文字預處理(文字分詞,過濾停用詞,詞頻統計,特徵選擇,文字表示)
系統:win7 32位 分詞軟體:PyNLPIR 整合開發環境(IDE):Pycharm 功能:實現多級文字預處理全過程,包括文字分詞,過濾停用詞,詞頻統計,特徵選擇,文字表示,並將結果匯出為WEKA能夠處理的.arff格式。 直接上程式碼: #!/usr/bin/
【Python】中文分詞並過濾停用詞
中文分詞並過濾停用詞,python程式碼如下。 #coding=utf-8 import jieba input_path='../data/train_pos_100.txt' output_path='../data/train_pos_100_seg.txt' st
用python進行資料預處理,過濾特殊符號,英文和數字。(適用於中文分詞)
要進行中文分詞,必須要求資料格式全部都是中文,需求過濾掉特殊符號、標點、英文、數字等。當然了使用者可以根據自己的要求過濾自定義字元。 實驗環境:python、mysql 實驗目的:從資料庫讀取資料,
OpenCV在字符提取中進行的預處理(轉)
的人 lease pos extract .net avg 圖像 rar 識別 OCR簡介熟悉OCR的人都了解,OCR大致分為兩個部分: -文字提取text extractor -文字識別text recognition 其中,第一部分是屬於圖像處理部分,涉及到圖像分割的知
《使用Python進行自然語言處理(Nltk)》2
import nltk from nltk.corpus import * '''1、古騰堡語料庫''' gutenberg.fileids() #所有古騰堡語料庫中的文字 emma = nltk.corpus.gutenberg.words('austen-e
python使用jieba實現中文文檔分詞和去停用詞
分享圖片 lac lena idt center cut inpu span code 分詞工具的選擇: 現在對於中文分詞,分詞工具有很多種,比如說:jieba分詞、thulac、SnowNLP等。在這篇文檔中,筆者使用的jieba分詞,並且基於python3環境,選擇
改進的中科院分詞系統NLPIR程式碼(加入使用者詞典,去停用詞,檔案讀寫)+情感分析字典包+工具包+論文包
NLPIR分詞,加入使用者詞典,去停用詞,檔案讀寫等 原始碼下載地址 優化的分詞系統程式碼 原始碼下載地址 NLPIR分詞系統 優化的分詞系統程式碼 以下是核心程式碼 完整程式碼可以直接執行分詞,點我跳轉 public cl
使用jieba分詞並去除停用詞流程程式
準備工作 ① 構建未分詞檔案、已分詞檔案兩個資料夾,將未分詞資料夾按類目定義檔名,各個類目的資料夾下可放置多個需要分詞的檔案。 ② 準備一份停用詞(jieba自身應該是沒有停用詞的) ③ 根據業務需要自定義詞典(此處使用jieba自帶字典) 分詞去停詞.py
使用IKAnalyzer實現中文分詞&去除中文停用詞
1、簡介:IKAnalyzer是一個開源的,基於java語言開發的輕量級的中文分詞工具包。這裡使用的是IKAnalyzer2012。 2、IK Analyzer 2012特性: (1)採用了特有的“正向迭代最細粒度切分演算法“,支援細粒度和智慧分詞兩種切分模式; (2)在
使用結巴分詞(jieba)對自然語言進行特徵預處理(Python、Java 實現)
一、前言 之前使用基於 Python 語言的 Spark 進行機器學習,程式設計起來是十分簡單。 ① 但是演算法部署到雲伺服器上,是一個障礙。 ② 得藉助 Flask/Django 等 Python W
《用Python進行自然語言處理》程式碼筆記(五):第七章:從文字提取資訊
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : Peidong # @Site : # @File : eg7.py # @Software: PyCharm """ 從文字提取資訊 """
Python正則表示式做文字預處理,去掉特殊符號
在進行文字訓練和處理之前難免要進行下預處理,過濾掉沒有用的符號等,簡單用python 的正則表示式過濾一下。 #!/usr/bin/python # encoding: UTF-8 import re # make English text clean def clean_en_text(te
sklearn庫:分類、迴歸、聚類、降維、模型優化、文字預處理實現用例(趕緊收藏)
分類演算法 # knn演算法 from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier() ''' __init__函式 def __init__(self, n_neighbors=5,
python與自然語言處理(五):中文文字詞雲
之前一直想要做一個文字的視覺化:詞雲,然後在網上搜到的一些製作詞雲的工具,有些是線上的就沒有使用,今天偶然看到python提供的wordcloud庫,可以方便製作詞雲,中英文皆可,趕緊試試,做個筆記,
python與自然語言處理(六):中文文字轉影象
最近使用word2vec對文字進行向量化表示,然後模仿基於CNN的影象分類實現文字分類。既然是模仿影象,那就應該可以將文字用影象視覺化一下,看看量化後的文字是什麼樣子。python處理影象的基本模組是Image庫,由於實驗中使用的是python3,需要安裝的影象處理庫為Pil
深度學習課程之文字預處理、詞袋模型、word2vec、語言模型(1.9)
詞向量和語言模型 深度學習其實最成功的應用是在影象上,有了 CNN 可以很好地提取影象上的特徵,這些特徵經過幾層的神經網路結構可以很好地組合成比較抽象的特徵。 NLP 常見任務 自動摘要:媒體需要的頭條通過 NLP 自動提取 機器翻譯 主題識別 文字分類
從文字預處理到TF-IDF權重計算(一)
前言最近在看些自然語言處理的知識,這裡分享下語言處理的過程。一般而言,自然語言預處理包含分詞、去停用詞、權重計算等。0x01 nltk庫安裝這裡以nltk庫為例。nltk的全稱是natural language toolkit,是一套基於python的自然語言處理工具集。安裝
數據預處理(Python scikit-learn)
距離度量 sklearn 神經網絡 效果 binary load roc maxscale 可能 在機器學習任務中,經常會對數據進行預處理.如尺度變換,標準化,二值化,正規化.至於采用哪種方法更有效,則與數據分布和采用算法有關.不同算法對數據的假設不同,可能需要不同的變換,
利用java實現對文字的去除停用詞以及分詞處理
功能: 對txt文件進行分詞處理,並去除停用詞。 工具: IDEA,java,hankcs.hanlp.seg.common.Term等庫。 程式: import java.util.*; import java.io.*; import java.lang.String; imp
資料科學和人工智慧技術筆記 五、文字預處理
五、文字預處理 作者:Chris Albon 譯者:飛龍 協議:CC BY-NC-SA 4.0 詞袋 # 載入庫 import numpy as np from sklearn.feature_extraction.text import Coun