昊天SEO

Python下的英文预处理

一 得到原始文本内容

派生到我的代码片
  1. def FileRead(self,filePath):
  2.     f = open(filePath)
  3.     raw=f.read()
  4.    return raw

 

二 分割成句子

  1. def SenToken(self,raw):#分割成句子
  2.     sent_tokenizer=nltk.data.load(‘tokenizers/punkt/english.pickle’)
  3.     sents = sent_tokenizer.tokenize(raw)
  4.     return  sents

 

三 句子内容的清理,去掉数字标点和非字母字符

  1. def CleanLines(self,line):
  2.     identify = string.maketrans()
  3.     delEStr = string.punctuation +string.digits  #ASCII 标点符号,数字  
  4.       cleanLine = line.translate(identify,delEStr) #去掉ASCII 标点符号和空格
  5.     cleanLine =line.translate(identify,delEStr) #去掉ASCII 标点符号
  6.    return cleanLine

 

四nltk.pos_tag进行词性标注

  1. def POSTagger(self,sent):
  2.     taggedLine=[nltk.pos_tag(sent) for sent in sents]
  3.    return taggedLine

五 nltk.word_tokenize分词

  1. def WordTokener(self,sent):#将单句字符串分割成词
  2.         result=
  3.         wordsInStr = nltk.word_tokenize(sent)
  4.        return wordsInStr

六 enchant拼写检查

派生到我的代码片
  1. def WordCheck(self,words):#拼写检查
  2.     d = enchant.Dict(“en_US”)
  3.     checkedWords=()
  4.     for word in words:
  5.         if not d.check(word):
  6.             d.suggest(word)
  7.             word=raw_input()
  8.         checkedWords = (checkedWords,’05’)
  9.    return checkedWords

七 去停用词和小写去短词

  1. def CleanWords(self,wordsInStr):#去掉标点符号,长度小于3的词以及non-alpha词,小写化
  2.     cleanWords=[]
  3.     stopwords = {}.fromkeys([ line.rstrip()for line in open(conf.PreConfig.ENSTOPWORDS)])
  4.     for words in wordsInStr:
  5.         cleanWords+= [[w.lower() for w in words if w.lower() not in stopwords and 3<=len(w)]]
  6.    return cleanWords

八 使用Wordnet进行词干化

  1.     def StemWords(self,cleanWordsList):
  2.         stemWords=[]
  3. #         porter = nltk.PorterStemmer()#有博士说这个词干化工具效果不好,不是很专业
  4. #         result=[porter.stem(t) for t incleanTokens]
  5.         for words in cleanWordsList:
  6.             stemWords+=[[wn.morphy(w) for w in words]]
  7.        return stemWords

九 完整代码

  1. #coding=utf-8
  2. ”’
  3. Created on 2014-3-20
  4. 英文的词干化和去停用词
  5. @author: liTC
  6. ”’
  7. import nltk
  8. # import enchant
  9. import string
  10. import re
  11. import os
  12. from config import Config as conf
  13. from nltk.corpus import wordnet as wn
  14. import sys
  15. reload(sys)
  16. sys.setdefaultencoding(‘utf-8’)
  17. class EnPreprocess:
  18.     ”’整体流程:
  19.     读取文件:FileRead()filepath to raw
  20.     分割成句子:SenToken()raw to sents
  21.     (词性标注):POSTagger()sent to words[]
  22.     句子分割成词:TokenToWords()将句子分割成词 sent to word[]
  23.     (拼写检查):WordCheck() 错误的去掉或是等人工改正
  24.     去掉标点,去掉非字母内容:CleanLines()句子,line to cleanLine
  25.     去掉长度小于3的词,小写转换,去停用词:CleanWords(),words[] to cleanWords[]
  26.     词干化:StemWords()把词词干化返回,words to stemWords
  27.     二次清理:再执行一次CleanWords(),使句子更加纯净
  28.     ”’
  29.     def__init__(self):
  30.         print‘English token and stopwords remove…’
  31.     defFileRead(self,filePath):#读取内容
  32.         f =open(filePath)
  33.        raw=f.read()
  34.         return raw
  35.     defWriteResult(self,result,resultPath):
  36.        self.mkdir(str(resultPath).replace(str(resultPath).split(‘/’)[-1],))
  37.        f=open(resultPath,“w”#将结果保存到另一个文档中
  38.        f.write(str(result))
  39.         f.close()
  40.     defSenToken(self,raw):#分割成句子
  41.        sent_tokenizer=nltk.data.load(‘tokenizers/punkt/english.pickle’)
  42.         sents =sent_tokenizer.tokenize(raw)
  43.         return  sents
  44.     def POSTagger(self,sent):
  45.        taggedLine=[nltk.pos_tag(sent) for sent in sents]
  46.         returntaggedLine
  47.     defWordTokener(self,sent):#将单句字符串分割成词
  48.         result=
  49.         wordsInStr= nltk.word_tokenize(sent)
  50.         returnwordsInStr
  51.     defWordCheck(self,words):#拼写检查
  52.         d =enchant.Dict(“en_US”)
  53.        checkedWords=()
  54.         for word inwords:
  55.             if notd.check(word):
  56.                d.suggest(word)
  57.                word=raw_input()
  58.            checkedWords = (checkedWords,’05’)
  59.         returncheckedWords
  60.     defCleanLines(self,line):
  61.         identify =string.maketrans()
  62.         delEStr =string.punctuation + string.digits #ASCII 标点符号,数字  
  63. #         cleanLine= line.translate(identify, delEStr) #去掉ASCII 标点符号和空格
  64.         cleanLine =line.translate(identify,delEStr) #去掉ASCII 标点符号
  65.         returncleanLine
  66.     defCleanWords(self,wordsInStr):#去掉标点符号,长度小于3的词以及non-alpha词,小写化
  67.        cleanWords=[]
  68.         stopwords ={}.fromkeys([ line.rstrip() for line in open(conf.PreConfig.ENSTOPWORDS)])
  69.         for wordsin wordsInStr:
  70.            cleanWords+= [[w.lower() for w in words if w.lower() not in stopwordsand 3<=len(w)]]
  71.         returncleanWords
  72.     defStemWords(self,cleanWordsList):
  73.        stemWords=[]
  74. #         porter =nltk.PorterStemmer()#有博士说这个词干化工具效果不好,不是很专业
  75. #        result=[porter.stem(t) for t in cleanTokens]
  76.         for wordsin cleanWordsList:
  77.            stemWords+=[[wn.morphy(w) for w in words]]
  78.         returnstemWords
  79.     defWordsToStr(self,stemWords):
  80.         strLine=[]
  81.         for wordsin stemWords:
  82.            strLine+=[w for w in words]
  83.         returnstrLine
  84.     defmkdir(self,path):
  85.         # 去除首位空格
  86.        path=path.strip()
  87.         # 去除尾部 \ 符号
  88.        path=path.rstrip(“\\”)
  89.         # 判断路径是否存在
  90.         # 存在    True
  91.         # 不存在  False
  92.        isExists=os.path.exists(path)
  93.         # 判断结果
  94.         if notisExists:
  95.             # 如果不存在则创建目录
  96.             printpath+‘ 创建成功’
  97.             # 创建目录操作函数
  98.            os.makedirs(path)
  99.             returnTrue
  100.         else:
  101.             # 如果目录存在则不创建,并提示目录已存在
  102.             printpath+‘ 目录已存在’
  103.             returnFalse
  104.     defEnPreMain(self,dir):
  105.         forroot,dirs,files in os.walk(dir):
  106.           foreachfiles in files:
  107.            croupPath=os.path.join(root,eachfiles)
  108.             printcroupPath
  109.            resultPath=conf.PreConfig.NLTKRESULTPATH+croupPath.split(‘/’)[-2]+‘/’+croupPath.split(‘/’)[-1]
  110.            raw=self.FileRead(croupPath).strip()
  111.            sents=self.SenToken(raw)
  112. #             taggedLine=self.POSTagger(sents)#暂不启用词性标注
  113.            cleanLines=[self.CleanLines(line) for line in sents]
  114.            words=[self.WordTokener(cl) for cl in cleanLines]
  115. #            checkedWords=self.WordCheck(words)#暂不启用拼写检查
  116.            cleanWords=self.CleanWords(words)
  117.            stemWords=self.StemWords(cleanWords)
  118. #            cleanWords=self.CleanWords(stemWords)#第二次清理出现问题,暂不启用
  119.            strLine=self.WordsToStr(stemWords)
  120.            self.WriteResult(strLine,resultPath)#一个文件暂时存成一行
  121.     defStandardTokener(self,raw):
  122.         result=
  123.         #还没弄好
  124.         returnresult
  125. enPre=EnPreprocess()
  126. enPre.EnPreMain(conf.PreConfig.ENCORUPPATH)

PS:一直还没用好Stanford的那个工具包,谁用过教我一下吧

本文地址官网    新乡网站建设,seo

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址