2016-05-09 4 views
1

私は次のように書いていますmain.pyです。括弧のトークン化を防ぐためにNLTKのword_tokenizeを変更してください。

#!/usr/bin/env python 
# vim: set noexpandtab tabstop=2 shiftwidth=2 softtabstop=-1 fileencoding=utf-8: 

import nltk 
import string 
import sys 
for token in nltk.word_tokenize(''.join(sys.stdin.readlines())): 
    #print token 
    if len(token) == 1 and not token in string.punctuation or len(token) > 1: 
     print token 

出力は次のとおりです。

./main.py <<< 'EGR1(-/-) mouse embryonic fibroblasts' 
EGR1 
-/- 
mouse 
embryonic 
fibroblasts 

私はそれが(他の変更なし)1つのトークンとしてEGR1(-/-)認識するように、わずかにトークナイザを変更したいです。誰かがトークン化ツールを軽く変更する方法があるかどうかを知っていますか?ありがとう。

答えて

2

word_tokenize()の機能は、NLTKにあり、正規表現置換のシーケンスに基づいてTreebankWordTokenizerになります。例えば

PARENS_BRACKETS = [ 
    (re.compile(r'[\]\[\(\)\{\}\<\>]'), r' \g<0> '), 
    (re.compile(r'--'), r' -- '), 
] 

for regexp, substitution in self.PARENS_BRACKETS: 
    text = regexp.sub(substitution, text) 

import re 

text = 'EGR1(-/-) mouse embryonic fibroblasts' 

PARENS_BRACKETS = [ 
    (re.compile(r'[\]\[\(\)\{\}\<\>]'), r' \g<0> '), 
    (re.compile(r'--'), r' -- '), 
] 

for regexp, substitution in PARENS_BRACKETS: 
    text = regexp.sub(substitution, text) 

print text 

[OUT]:

EGR1 (-/-) mouse embryonic fibroblasts 
具体的には、括弧の間にスペースを追加することになると

は、TreebankWordTokenizerこの正規表現置換を使用し

NLTK word_tokenize()関数を「ハッキングする」に戻ると、c PARENS_BRACKETSの置換を取り消すためにこのようなものを試してください:

>>> from nltk.tokenize import TreebankWordTokenizer 
>>> tokenizer = TreebankWordTokenizer() 
>>> tokenizer.PARENS_BRACKETS = [] 
>>> text = 'EGR1(-/-) mouse embryonic fibroblasts' 
>>> tokenizer.tokenize(text) 
['EGR1(-/-)', 'mouse', 'embryonic', 'fibroblasts'] 
関連する問題