2

句読点を含め、トークン化したい文があります。しかし、「can't」のようなものではない単語が「ca」と「n't」にトークン化され、分割がアポストロフィの 1 文字前になり、残りの短縮語が分割されるように、短縮形を処理する必要があります。 "you've" や "It's" のようなアポストロフィーでは、"you"、"'ve"、"It"、"'s" に変わります。これは私が立ち往生しているところです。基本的に、NKTL の TreebankWord Tokenizer の動作とほぼ同じです: NLTK Word Tokenization Demo

ここで提案されているソリューションの1つを使用していますが、これは私が望むように収縮を処理しません:

re.findall("'\w+|[\w]+|[^\s\w]", "Hello, I'm a string! Please don't kill me? It's his car.")

そして、私はこの結果を得る:

['Hello', ',', 'I', "'m', 'a', 'string', '!', 'Please', 'don', "'t', 'kill', 'me' , '?', 'It', "'s", 'his', 'car', '.']

「do」および「n't」である必要がない場合を除いて、アポストロフィを正しく処理します。誰でもそれを修正する方法を知っていますか?

標準ライブラリしか使用できないため、この場合 NLTK はオプションではありません。

4

3 に答える 3

1

正規表現:

\w+(?=n't)|n't|\w+(?=')|'\w+|\w+

使用法

match_list = re.findall(r"\w+(?=n't)|n't|\w+(?=')|'\w+|\w+","you've it's couldn't don't", re.IGNORECASE | re.DOTALL)

一致:

['you', "'ve", "it", "'s", 'could', "n't", "do", "n't"]
于 2014-08-19T19:51:23.410 に答える
0

キャッチn't\w+(?=n't)ビフォア\w+

r"'\w+|n't|\w+(?=n't)|\w+|[^\s\w]"
于 2013-03-01T08:32:44.590 に答える
0

試す:

r"[n]'[\w]+|[\w]+(?!')(?:[A-Za-mo-z](?='))?|(?<=\s)[\w](?=')|[^\s\w']"

これは、文字の後'にさらに文字が続く場合に一致し、他のパターンと一致できる場合でも最初に一致します。

于 2013-01-29T05:22:44.123 に答える