2

各単語の POS (品詞) タグを含む次の txt ファイルがあります。

不必要/jj to/to say/vb ,/, I/ppss was/bedz furious/jj at/in this/dt unparalleled/jj intrusion/nn on/in free/jj enterprise/nn ./. どうやって/wrbあえて/vbn彼ら/ppss

POS タグなしでファイルを読み取る方法はあるので、結果は次のようになります。

言うまでもなく、私はこの比類のない自由企業への侵入に激怒しました。彼らはどれほど大胆でしたか

したがって、基本的には . の後の文字を削除したいと思い/ます。

words = re.findall('\w+',open(input_file).read())

上記のコードは / を削除しますが、 jj 、 ppss などの省略形は引き続き表示されます。では、 / の後に任意の文字を削除する方法。

4

3 に答える 3

4

これで十分ですか?

>>> 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 .'

/これは、空白が見つかるまで、 で始まるテキストを単純に削除します。

于 2013-03-12T15:18:46.033 に答える
1

Woobleが提案しているように、リスト内包にネストされた2つの分割を使用してこれを行うことができます。

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("/")英語の単語(または罰則)を品詞から分離します。word.split("/")[0]英語の単語のみを選択し、POSを破棄します。" ".join()結果の英語の単語のリストを1つの文字列に結合します。

于 2013-03-12T15:33:56.363 に答える
0

このコードは、Wooble の発言と、文字列のリストを処理する必要性を考慮しています。

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)

結果

//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
于 2013-03-12T18:25:21.990 に答える