要将句子拆分成记号,我正在执行以下操作,其中i很慢
import spacy nlp = spacy.load("en_core_web_lg")
text = "This is a test. This is another test"
sentence_tokens = []
doc = nlp(text)
for sent in doc.sents:
words = nlp(sent.text)
all = []
for w in words:
all.append(w)
sentence_tokens.append(all)
我有点想通过nltk处理它的方式来执行此操作,在该方法中,您使用来将文本拆分为多个句子sent_tokenize()
,然后为每个句子运行word_tokenize()
您的方法的主要问题是您要处理两次。中的句子doc.sents
是一个Span
宾语,即Token
s的序列。因此,无需再次调用nlp
句子文本– spaCy已经在后台为您完成了所有这些操作,并且Doc
您回来的信息已经包含了您需要的所有信息。
因此,如果您需要一个字符串列表,每个令牌一个,则可以执行以下操作:
sentence_tokens = []
for sent in doc.sents:
sentence_tokens.append([token.text for token in sent])
甚至更短:
sentence_tokens = [[token.text for token in sent] for sent in doc.sents]
如果要处理大量文本,则可能还想使用nlp.pipe
它来提高效率。这将分批处理文本并产生Doc
对象。您可以在此处了解更多信息。
texts = ["Some text", "Lots and lots of texts"]
for doc in nlp.pipe(texts):
sentence_tokens = [[token.text for token in sent] for sent in doc.sents]
# do something with the tokens
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句