word tokenize
-
NLTK
nltk.word_tokenize
substring,按标点字符和空格划分,但保留小数、分数一类
nltk.tokenize.RegexpTokenizer
正则可保留固定的一部分,如对一些金钱'$10'表示或者其他非空白序列
nltk.tokenize.stanford.StanfordTokenizer
会将单位切分更细,例如:kg/m² -> 'kg', '/', 'm', '²'
nltk.tokenize.mwe.MWETokenizer
对已分词的文本进行再处理或者合并多个字符为一个
- nltk.tokenizr.WordPunctTokenizer.tokenize()`
按字符和非字符进行划分,相当于使用正则
w+|[^ws]+
,与word_tokenize的区别在于,会将小数、分数分开nltk.tokeizer.WhitespaceTokenizer().tokenize()
按(space, tab, newline)划分
-
Spacy
预定义的分词是按照空格来划分,spaCy首先对文本分词,原始文本在空格处分割,类似于text.split(' '),然后分词器(Tokenizer)从左向右依次处理token,在处理token时,spaCy做了两个check:
- 是否匹配特殊规则(execption rule)
- 是否前缀、中缀或后缀可以分割
spacy进行自定义规则处理,比如网址:
import re from spacy.lang.en import English nlp = spacy.load("en_core_web_sm") def my_en_tokenizer(nlp): prefix_re = spacy.util.compile_prefix_regex(English.Defaults.prefixes) suffix_re = spacy.util.compile_suffix_regex(English.Defaults.suffixes) infix_re = spacy.util.compile_infix_regex(English.Defaults.infixes) pattern_re = re.compile(r'^https?://') return spacy.tokenizer.Tokenizer(nlp.vocab, English.Defaults.tokenizer_exceptions, prefix_re.search, suffix_re.search, infix_re.finditer, token_match=pattern_re.match) nlp.tokenizer = my_en_tokenizer(nlp) doc = nlp(ss) print([t.text for t in doc]) ''' ['abd', ',', 'defe', ',', 'https://www.selleck.eu/products/MK-2206'] '''
简单总结:
nltk的word_tokenize符合常用分词,能将带有连字符'-','/'的词进行保留,对常用单位进行保留,比如'kg/m²'等。添加自定义词典,可利用MWETokenizer进一步处理。