PYTHON:从txt文件中删除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)

我有以下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).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