要将我的句子拆分为标记,我正在执行以下操作,这很慢
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)
Run Code Online (Sandbox Code Playgroud)
我有点想用 nltk 处理它的方式来做这件事,你将文本拆分成句子sent_tokenize(),然后使用每个句子运行word_tokenize()
您的方法的主要问题是您将所有内容处理两次。一个句子 indoc.sents是一个Span对象,即一个Tokens的序列。因此,无需再次调用nlp句子文本——spaCy 已经在幕后为您完成了所有这些工作,您Doc返回的内容已经包含了您需要的所有信息。
因此,如果您需要一个字符串列表,每个标记一个,您可以执行以下操作:
sentence_tokens = []
for sent in doc.sents:
sentence_tokens.append([token.text for token in sent])
Run Code Online (Sandbox Code Playgroud)
或者更短:
sentence_tokens = [[token.text for token in sent] for sent in doc.sents]
Run Code Online (Sandbox Code Playgroud)
如果您正在处理大量文本,您可能还想使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |