如何获得连词在空格中的跨度?
问题描述
我使用spacy,token.conjuncts
来获取每个标记的合取词。
但是,token.conjuncts
的返回类型是tuple
,但我想获取span
类型,例如:
import spacy
nlp = spacy.load("en_core_web_lg")
sentence = "I like to eat food at the lunch time, or even at the time between a lunch and a dinner"
doc = nlp(sentence)
for token in doc:
conj = token.conjuncts
print(conj)
#output: <class 'tuple'>
有人知道如何将此tuple
转换为span
类型吗?
或者我如何才能直接获取span
类型的合取?
我需要span
类型的原因是,我想使用conjuncts (span)
来定位这个连词的位置,例如,这个连词属于哪个名词块或拆分(无论我用什么方法来拆分它们)。
目前,我将tuple
转换为str
以迭代所有拆分或名词块,以搜索拆分/名词块是否包含conjunct
。
conjunct
出现在多个拆分/名词块中时,则定位包含该conjunct
的准确拆分将会出现问题。因为我只考虑str
,而不考虑index
或id
的conjunct
。如果我可以得到这个conjunct
的span
,那么我就可以定位conjunct
的确切位置。
请随时发表意见,提前谢谢!
解决方案
token.conjuncts
返回令牌的元组。若要获取范围,请调用doc[conj.i: conj.i+1]
import spacy
nlp = spacy.load('en_core_web_sm')
sentence = "I like oranges and apples and lemons."
doc = nlp(sentence)
for token in doc:
if token.conjuncts:
conjuncts = token.conjuncts # tuple of conjuncts
print("Conjuncts for ", token.text)
for conj in conjuncts:
# conj is type of Token
span = doc[conj.i: conj.i+1] # Here's span
print(span.text, type(span))
相关文章