PYTHON:从txt文件中删除POS标记
我有以下txt文件,其中包含每个单词的POS()标记 无需/jj to/说/vb,/,我/ppss/bedz愤怒/jj at/在此/dt无与伦比/jj入侵/nn on/in free/jj enterprise/nn./。 如何/wrb敢/vbn他们/PPS 有没有办法在没有POS标签的情况下读取文件,因此结果将是: 不用说,我对这种对自由企业的空前入侵感到愤怒。 他们怎么敢 因此,基本上我想删除PYTHON:从txt文件中删除POS标记,python,Python,我有以下txt文件,其中包含每个单词的POS()标记 无需/jj to/说/vb,/,我/ppss/bedz愤怒/jj at/在此/dt无与伦比/jj入侵/nn on/in free/jj enterprise/nn./。 如何/wrb敢/vbn他们/PPS 有没有办法在没有POS标签的情况下读取文件,因此结果将是: 不用说,我对这种对自由企业的空前入侵感到愤怒。 他们怎么敢 因此,基本上我想删除/后面的任何字符 words = re.findall('\w+',open(input_file)
/
后面的任何字符
words = re.findall('\w+',open(input_file).read())
上述代码将删除/但仍会出现缩写,如jj、ppss。
那么,如何删除/后跟任何字符。这足够好吗
>>> import re
>>> s = 'Needless/jj to/to say/vb ,/, I/ppss was/bedz furious/jj at/in this/dt unparalleled/jj intrusion/nn upon/in free/jj enterprise/nn ./.'
>>> re.sub(r'/[^\s]+','',s)
'Needless to say , I was furious at this unparalleled intrusion upon free enterprise .'
这只需删除任何以
/
开头的文本,直到找到空白。正如Wooble所建议的,您可以使用嵌套在列表中的两个拆分来完成此操作:
s = 'Needless/jj to/to say/vb ,/, I/ppss was/bedz furious/jj at/in this/dt unparalleled/jj intrusion/nn upon/in free/jj enterprise/nn ./.'
print " ".join(word.split("/")[0] for word in s.split())
输出:
Needless to say , I was furious at this unparalleled intrusion upon free enterprise .
s.split()<代码>单词。拆分(“/”)
将英语单词(或发音标记)与其词性分开word.split(“/”[0]
仅选择英文单词并丢弃位置。”。join()
将生成的英文单词列表合并为一个字符串。此代码考虑了Wooble的备注和您处理字符串列表的需要,afaiu:
li = [ ('//Needless/jj to/to say/vb ,/, '
'I/ppss was/bedz fur/ious/jj at/in this/dt '
'unparalleled/jj intrusion/nn upon/in '
'free/jj enterprise/nn ./. '
'How/wrb dared/vbn they/ppss'),
'/Before/jj to/to say/vb ,/, /I/ppss am/bedz h/a/p/p/y/jj']
import re
def clean(s,r=re.compile('(?<![\s/])/[^\s/]+(?![\S/])')):
return r.sub('',s)
x = map(clean, li)
print '\n\n'.join(x)
文件中是否有任何不是标记指示器的
/
?单词/标记组合是否总是以空格分隔?使用.split()
两次是最简单的解决方案,可能有效,也可能无效。请看我的答案,因为txt在一个列表中:newText=re.sub(r'/[^\s]+','',words)Traceback(最近一次调用最后一次):File“”,第1行,在文件“/usr/lib/python2.7/re.py”中,第151行,在sub中返回编译(模式、标志).sub(repl、字符串、计数)TypeError:应为字符串或buffer@user2152825--所以您要将一个列表传递给re.sub
。那不行re.sub
需要字符串。那么,有什么解决方案吗?传递字符串有什么问题re.sub(r'/[^\s]+','',open(fname.read())
?你为什么需要re.findall
呢?它终于可以工作了,但我仍然有换行符,比如:。\n\n\tPelham指向了当然,那么它将是[“”。join(s.split()中的word.split(“/”[0])对于myListOfSentences中的s]
非常感谢它可以工作:):)对'/无需/jj指向/说/vb,/,I/ppss was/bedz fur/ious/jj'
//Needless to say , I was fur/ious at this unparalleled intrusion upon free enterprise . How dared they
/Before to say , /I am h/a/p/p/y