当前位置: 首页 > 科技观察

总结!实用Python文本预处理代码

时间:2023-03-17 16:04:28 科技观察

本文将讨论文本预处理的基本步骤,旨在将文本信息从人类语言转换为机器可读格式,以供后续处理。此外,本文还将进一步讨论文本预处理过程所需的工具。当你得到一段文本时,首先开始进行文本规范化(textnormalization)处理。常见的文本正则化步骤包括:将文本中出现的所有字母转换为小写或大写将文本中的数字转换为单词或删除它们删除文本中出现的标点符号、重音符号和其他变音符号展开文本中出现的缩写删除thestopwords,sparsewordsandspecificwordstheappearedinthetext文本规范化(textcanonicalization)下面将详细介绍上述文本规范化步骤。将文本中出现的字母转为小写例1:将字母转为小写Python实现代码:input_str=”The5biggestcountriesbypopulationin2017areChina,India,UnitedStates,Indonesia,andBrazil.”input_strinput_str=input_str.lower()print(input_str)输出:the5biggestcountriesbypopulationin2017arechina,印度、美国、印度尼西亚和巴西。删除出现在文本中的数字。如果文本中的数字与文本分析无关,则删除数字。通常,正则表达式可以帮助您完成此过程。示例2:删除数字Python实现代码:importreinput_str='BoxAcontains3redand5whiteballs,whileBoxBcontains4redand2blueballs.'reresult=re.sub(r'\d+','',input_str)print(result)output:BoxAcontainsredandwhiteballs,whileBoxBcontainsredandblueballs.删除文本中出现的标点符号下面的示例代码演示了如何删除文本中的标点符号,例如[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]等符号。示例3:删除标点Python实现代码:importstringinput_str="This&is[an]example?{of}string.with.?punctuation!!!!"#Samplestringresult=input_str.translate(string.maketrans("",""),string.punctuation)print(result)output:Thisisanexampleofstringwithpunctuation删除文本中出现的空格可以使用strip()函数去掉文本前后出现的空格。示例4:删除空格Python实现代码:input_str="\tastringexample\t"input_strinput_str=input_str.strip()input_stroutput:'astringexample'标记化(Tokenization)标记化是将给定的文本拆分成带有标记的小模块的过程,在其中单词、数字、标点符号等符号都是可见的Tokenization是一种token。在下面table(Tokenizationsheet),列出了一些用于实现标记化过程的常用工具。停用词(Stopwords)是指语言中最常见的词,如“a”、“a”、“on”、“is”、“all”等。这些词没有特殊或重要的含义,通常可以从文本中删除。这些终止符通常使用自然语言工具包(NLTK)删除,这是一个专门用于符号和自然语言处理统计的开源库。示例7:删除停用词实现代码:input_str="NLTKisaleadingplatformforbuildingPythonprogramstoworkwithhumanlanguagedata."stop_words=set(stopwords.words('english'))fromnltk.tokenizeimportword_tokenizetokens=word_tokenize(input_str)result=[iforiintokensifnotiinstop_words]Koutput['print('','leading','platform','building','Python','programs','work','human','language','data','.']另外,scikit-learn还提供了一个处理停用词的工具:fromsklearn.feature_extraction.stop_wordsimportENGLISH_STOP_WORDS同样,spaCy也有一个类似的处理工具:fromspacy.lang.en.stop_wordsimportSTOP_WORDS去除文本中出现的稀疏词和特定词在某些情况下,需要去除文本中出现的一些稀疏词或特定词。考虑到任何单词都可以被视为一组终止符,这可以通过终止符删除工具来实现。词干提取词干提取是将单词简化为其词干、词根或单词形式(例如books-book、looked-look)的过程。目前主流的两种算法是Porterstemming算法(删除词中的常见形式和拐点词尾)和Lancasterstemming算法。示例8:使用NLYK实现词干提取。实现代码:fromnltk.stemimportPorterStemmerfromnltk.tokenizeimportword_tokenizestemmer=PorterStemmer()input_str=”Thereareseveraltypesofstemmingalgorithms.”input_str=word_tokenize(input_str)forwordinput_str:print(stemmerith.stem:Thermalstemformwords)输出一个词的不同形式到一个共同的基本形式。与词干提取过程相反,词形还原不是简单地切断或变形单词,而是使用词汇知识库来获得正确的单词形式。目前常用的词形还原工具库包括:NLTK(WordNetLemmatizer)、spaCy、TextBlob、Pattern、gensim、StanfordCoreNLP、Memory-BasedShallowParser(MBSP)、ApacheOpenNLP、ApacheLucene、GeneralArchitectureforTextEngineering(GATE)、Illinois词形还原器和DKPro核心。示例9:使用NLYK实现词形还原实现代码:fromnltk.stemimportWordNetLemmatizerfromnltk.tokenizeimportword_tokenizelemmatizer=WordNetLemmatizer()input_str=”beenhaddonelanguagescitiesmice”input_str=word_tokenize(input_str)forwordininput_str:print(lemmatizer.lemmatize(word))输出:behavedolanguagecitymouse词性标注(POS)词性标注旨在根据单词的定义和上下文含义,为给定文本中的每个单词(例如名词、动词、形容词和其他单词)分配一个词性。目前包含词性标注器的工具有很多,包括NLTK、spaCy、TextBlob、Pattern、StanfordCoreNLP、Memory-BasedShallowParser(MBSP)、ApacheOpenNLP、ApacheLucene、GeneralArchitectureforTextEngineering(GATE)、FreeLing、IllinoisPartSpeechTagger和DKProCore。示例10:使用TextBlob实现词性标注实现代码:input_str=”Partsofspeecheexamples:anarticle,towrite,interesting,easily,and,of”fromtextblobimportTextBlobresult=TextBlob(input_str)print(result.tags)output:[('Parts',u'NNS'),('of',u'IN'),('speech',u'NN'),('examples',u'NNS'),('an',u'DT'),('文章',u'NN'),('to',u'TO'),('write',u'VB'),('有趣',u'VBG'),('easily',u'RB'),('and',u'CC'),('of',u'IN')]wordchunking(shallowparsing)wordchunking是一种识别句子中成分的方法(如名词、动词、形容词等)并将它们链接到离散语法意义的高阶单元(如名词或短语组、动词组等)常用的分词工具包括:NLTK、TreeTaggerchunker,ApacheOpenNLP,文本工程通用架构(GATE),FreeLing。示例11:使用NLYK进行单词分块第一步是确定每个单词的词性。实现代码:input_str=”AblacktelevisionandwhitestovewereboughtforthenewapartmentofJohn.”fromtextblobimportTextBlobresult=TextBlob(input_str)print(result.tags)输出:[('A',u'DT'),('black',u'JJ'),('电视',u'NN'),('and',u'CC'),('a',u'DT'),('white',u'JJ'),('stove',u'NN'),('were',u'VBD'),('bought',u'VBN'),('for',u'IN'),('the',u'DT'),('new',u'JJ'),('apartment',u'NN'),('of',u'IN'),('John',u'NNP')]第二部分是分词块的实现代码:reg_exp="NP:{

?*}"rp=nltk.RegexpParser(reg_exp)result=rp.parse(result.tags)print(result)输出:(S(NPA/DTblack/JJtelevision/NN)and/CC(NPa/DTwhite/JJstove/NN)were/VBDbought/VBNfor/IN(NPthe/DTnew/JJapartment/NN)of/INJohn/NNP)也可以通过result.draw()函数绘制句子树结构图,如下图命名实体识别(NamedEntityRecognition)命名实体识别(NER)旨在从文本中找到命名实体并将其划分为预先定义的类别(人、地点、组织、时间等)。常见的命名实体识别工具如下表所示,包括:NLTK、spaCy、GeneralArchitectureforTextEngineering(GATE)--ANNIE、ApacheOpenNLP、StanfordCoreNLP、DKProcore、MITIE、WatsonNLP、TextRazor、FreeLing等。示例12:使用TextBlob实现词性标注实现代码:fromnltkimportword_tokenize,pos_tag,ne_chunkinput_str="BillworksforApplesohewenttoBostonforaconference."printne_chunk(pos_tag(word_tokenize(input_str)))输出:(S(PERSONBill/NNP)works/VBZfor/INApple/NNPso/INPRPwent/VBDto/TO(GPEBoston/NNP)for/INa/DTconference/NN./.)Coreferenceresolution(anaphoraresolution)代词和其他指称表达应该与正确的人相关联。共指消解在文本中指代现实世界中的同一个实体。例如,在“Andrewsaidhewouldbuyacar”这句话中,代词“he”指的是同一个人,即“Andrew”。常用的Coreference解析工具如下表所示,包括StanfordCoreNLP、spaCy、OpenCalais、ApacheOpenNLP等。搭配抽取(Collocationextraction)搭配抽取的过程不是单独发生或偶然发生的,它是与词组合一起发生的过程。过程示例包括“打破规则”、“空闲时间”、“得出结论”、“牢记”、“准备好”等。示例13:使用ICE实现搭配提取实现代码:input=[“heandChazzduelwithallkeysontheline。”]fromICEimportCollocationExtractorextractor=CollocationExtractor.with_collocation_pipeline("T1",bing_key="Temp",pos_check=False)print(extractor.get_collocations_of_length(input,length=3,))输出:["ontheline"]关系提取(Relationshipextraction)关系抽取过程是指从非结构化数据源(如原始文本)中获取结构化文本信息。严格来说,它识别命名实体(例如人、组织、地点的实体)之间的关系(例如配偶、工作等)。例如,从“昨天与马克和艾米丽结婚”这句话中,我们可以提取出马克是艾米丽的丈夫的信息。总结本文讨论了文本预处理及其主要步骤,包括正则化、标记化、词干化、词形还原、分词、词性标注、命名实体识别、共指消解、搭配抽取和关系抽取。一些表格还用于列出常用的文本预处理工具和相应的示例。完成这些预处理任务后,得到的结果可以用于更复杂的NLP任务,如机器翻译、自然语言生成等任务。