我有以下main.py
。
#!/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
有没有人知道有没有这样的方法来稍微修改一下记号赋予器?谢谢。
发布于 2016-05-09 08:25:25
NLTK
中的默认word_tokenize()
函数是基于正则表达式替换序列的TreebankWordTokenizer。
更具体地说,当涉及到在括号之间添加空格时,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
输出
EGR1 ( -/- ) mouse embryonic fibroblasts
因此,回到“黑客”NLTK word_tokenize()
函数,您可以尝试类似这样的操作来取消PARENS_BRACKETS
替换的影响:
>>> from nltk.tokenize import TreebankWordTokenizer
>>> tokenizer = TreebankWordTokenizer()
>>> tokenizer.PARENS_BRACKETS = []
>>> text = 'EGR1(-/-) mouse embryonic fibroblasts'
>>> tokenizer.tokenize(text)
['EGR1(-/-)', 'mouse', 'embryonic', 'fibroblasts']
https://stackoverflow.com/questions/37108656
复制相似问题