保留所有空格作为标记
Keeping all white spaces as tokens
我有一个问题,关于是否有办法在 spaCy 标记化中将单个白色 space 作为一个独立的标记。
例如,如果我 运行:
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is easy.")
toks = [w.text for w in doc]
toks
结果是
['This', 'is', 'easy', '.']
相反,我想要
['This', ' ', 'is', ' ', 'easy', '.']
有没有简单的方法可以做到这一点?
spaCy 将令牌的空白公开为 whitespace_
属性。所以如果你只需要一个字符串列表,你可以这样做:
token_texts = []
for token in doc:
token_texts.append(token.text)
if token.whitespace_: # filter out empty strings
token_texts.append(token.whitespace_)
如果您想从这些标记中创建一个实际的 Doc
对象,那也是可能的。 Doc
对象可以 constructed 带有 words
关键字参数(要添加为标记的字符串列表)。但是,我不确定那会有多大用处。
如果您想要 doc
对象中的空格:
import spacy
from spacy.tokens import Doc
class WhitespaceTokenizer(object):
def __init__(self, vocab):
self.vocab = vocab
def __call__(self, text):
words = text.split(' ')
res = [' '] * (2 * len(words) - 1)
res[::2] = words
return Doc(self.vocab, words=res)
nlp = spacy.load('en_core_web_sm')
nlp.tokenizer = WhitespaceTokenizer(nlp.vocab)
doc = nlp("This is easy.")
print([t.text for t in doc])
我有一个问题,关于是否有办法在 spaCy 标记化中将单个白色 space 作为一个独立的标记。
例如,如果我 运行:
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is easy.")
toks = [w.text for w in doc]
toks
结果是
['This', 'is', 'easy', '.']
相反,我想要
['This', ' ', 'is', ' ', 'easy', '.']
有没有简单的方法可以做到这一点?
spaCy 将令牌的空白公开为 whitespace_
属性。所以如果你只需要一个字符串列表,你可以这样做:
token_texts = []
for token in doc:
token_texts.append(token.text)
if token.whitespace_: # filter out empty strings
token_texts.append(token.whitespace_)
如果您想从这些标记中创建一个实际的 Doc
对象,那也是可能的。 Doc
对象可以 constructed 带有 words
关键字参数(要添加为标记的字符串列表)。但是,我不确定那会有多大用处。
如果您想要 doc
对象中的空格:
import spacy
from spacy.tokens import Doc
class WhitespaceTokenizer(object):
def __init__(self, vocab):
self.vocab = vocab
def __call__(self, text):
words = text.split(' ')
res = [' '] * (2 * len(words) - 1)
res[::2] = words
return Doc(self.vocab, words=res)
nlp = spacy.load('en_core_web_sm')
nlp.tokenizer = WhitespaceTokenizer(nlp.vocab)
doc = nlp("This is easy.")
print([t.text for t in doc])