使用空格,我试图将三个不同的令牌合并为一个令牌。
例如两个不同的符号"bell"peper"变成一个符号"灯笼椒";通过下面的代码。(我不认为我的代码是一个正确的方法虽然)
text='extra-virgin olive oil bell pepper Parmesan Cheese onion red bell pepper carrots cloves, beans fennel bulb parsnips vegetable broth broccoli florets macaroni Parmesan cheese'
import spacy
nlp = spacy.load('en_core_web_sm')
nlp.tokenizer.add_special_case('connection',
[
{ 'pos': 'NOUN',
'F': '-',
'F': 'oil'},
{
'F':'bell',
'F':'pepper'
},
{
'F':'olive',
'F':'oil'
},
{
'F':'Parmesan',
'F':'Cheese'
}
])
doc= nlp(text)
doc[0]
extra
我如何做到这一点?
谢谢
看起来你要做的是合并一些短语,比如"橄榄油";或者"甜椒",变成单个记号。这通常不是您使用tokenizer异常所做的事情-这些异常通常在拆分单词或处理特殊标点符号时更有用。例如,您可能希望标记"gimme";"给我";(以便"我";可以被认出来)或者要有"2km";和"2公里";都是两个令牌
在这种情况下,我将列出您想要制作的所有短语,并使用EntityRuler为它们分配实体标签。这假设你有一个想要合并的东西的列表。
如果你没有一个你想要组成短语的东西的列表,在你的示例文本中,这将是困难的,因为在你所做的合并背后没有一般的原则,比如词性模式。space模型是在自然语言文本上训练的,而你似乎只有一个没有加标点的成分列表,所以词性标注器并不总是能很好地工作。例如,考虑这些句子:
我去商店买了橄榄油,甜椒和蛋糕粉。
这没有正确地加标点,但它显然是一个列表。如果加了适当的标点符号,spaCy的noun_chunks
就会给你想要的。
问题是这也是一个有效的句子:
晚餐我做了橄榄油甜椒意大利面。
这有点尴尬,但适当地加了标点符号,在这种情况下,"橄榄油甜椒";是"past "的修饰语而不是一个单独的项目列表,所以它应该是一个单独的名词块。