Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 保留所有空白作为标记_Python_Spacy - Fatal编程技术网

Python 保留所有空白作为标记

Python 保留所有空白作为标记,python,spacy,Python,Spacy,我有一个问题,在spaCy标记化中,是否有一种方法可以保持单个空白作为独立的标记 例如,如果我运行: 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标记化中,是否有一种方法可以保持单个空白作为独立的标记

例如,如果我运行:

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\uu
属性。因此,如果您只需要字符串列表,可以执行以下操作:

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
对象可以使用
words
关键字参数(作为标记添加的字符串列表)。但是,我不确定这会有多大用处。

如果您想要
文档中的空格
对象:

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])

酷。这就是我需要的。谢谢这也很有用。非常感谢你!