任务
对Excel中的摘要列的英文段落进行英文分词、词性标注,将结果导入Excel
下面展示代码`。
import nltk
from nltk.tokenize import WordPunctTokenizer, sent_tokenize
from nltk.corpus import stopwords
from nltk.tag import pos_tag
import numpy as np
import pandas as pd
import xlwt
#英文断句分词
def wo_se_broken(sentence):
#先分句,再分词
paragraph = sentence#句子与下一个句子之间要用空格隔开
sents=nltk.sent_tokenize(paragraph.lower())#sent_tokenize返回分句后的句子列表
#print(sents)
words=[]
for sent in sents:
text_list=nltk.word_tokenize(sent)#分词
#去掉标点符号
english_punctuations=[',', '.', ':', ';', '?', '(', ')', '[', ']', '&', '!', '*', '@', '#', '$', '%']
word_1=[w for w in text_list if w not in english_punctuations]
#去掉停用词(停用词均为小写形式,需先将句子转为小写形式)
stops = set(stopwords.words("english"))#set()函数创建一个无序不重复元素集
word_2=[w for w in word_1 if w not in stops]
word_3=pos_tag(word_2)#词性标注
words=words+word_3
#print(words)
return words
path='E://网页下载/20210912071950877.XLSX'
path_end='E://网页下载/0-500_processed.xls'
data = pd.read_excel(path)
df1=pd.DataFrame(data)
abstracts=df1['摘要'].values#获取摘要列数据
#print(abstracts)
#以字典形式创建DataFrame
value=[]
data={'摘要分词':value}
#摘要列断词,每行一个循环
for i in range(len(abstracts)):
abstract=abstracts[i]
ab_broken=wo_se_broken(abstract)
value.append(ab_broken)
#print(data)
df2=pd.DataFrame(data,columns=['摘要分词'])
df2.to_excel(path_end,columns=['摘要分词'])
一些注意的问题:
1、DataFrame是一种数据结构,对于读取到的Excel数据,须先转换成DataFrame格式,才可进行操作
DataFrame(数据,list索引(行数),list列名)
2、将结果导入Excel中时(我所得结果为断词后的列表),需先以元组方式 创建DataFrame结构,然后以DataFrame结构的结构写入Excel