对于这两种情况,令牌化的工作方式不同。
Tokenization not working the same for both case.
我有一个文件
doc = nlp('x-xxmessage-id:')
当我想提取这个的标记时,我得到 'x'、'xx'、'message' 和 'id'、':'。一切顺利。
然后我创建一个新文档
test_doc = nlp('id')
如果我尝试提取 test_doc 的标记,我将得到 'i' 和 'd'。有什么办法可以解决这个问题吗?因为我想获得与上面相同的标记,这在文本处理中造成了问题。
就像语言本身一样,标记化是上下文相关的,language-specific data 定义了告诉 spaCy 如何根据周围字符拆分文本的规则。 spaCy 的默认值也针对通用文本进行了优化,例如新闻文本、网络文本和其他现代写作。
在您的示例中,您遇到了一个有趣的案例:抽象字符串 "x-xxmessage-id:"
根据标点符号拆分,而孤立的小写字符串 "id"
拆分为 "i"
和"d"
,因为在书面文本中,它最常见的是 "I'd" 或 "i'd" 的替代拼写("I could"、"I would" 等)。您可以找到相应的规则 here.
如果您要处理与常规自然语言文本有很大不同的特定文本,您通常需要 customise the tokenization rules or possibly even add a Language
subclass for your own custom "dialect". If there's a fixed number of cases you want to tokenize differently that can be expressed by rules, another option would be to add a component to your pipeline that 。
最后,您也可以尝试使用 language-independent xx
/ MultiLanguage
class 代替。它仍然包含非常基本的标记化规则,例如标点符号拆分,但 none 特定于英语的规则。
from spacy.lang.xx import MultiLanguage
nlp = MultiLanguage()
我有一个文件
doc = nlp('x-xxmessage-id:')
当我想提取这个的标记时,我得到 'x'、'xx'、'message' 和 'id'、':'。一切顺利。 然后我创建一个新文档
test_doc = nlp('id')
如果我尝试提取 test_doc 的标记,我将得到 'i' 和 'd'。有什么办法可以解决这个问题吗?因为我想获得与上面相同的标记,这在文本处理中造成了问题。
就像语言本身一样,标记化是上下文相关的,language-specific data 定义了告诉 spaCy 如何根据周围字符拆分文本的规则。 spaCy 的默认值也针对通用文本进行了优化,例如新闻文本、网络文本和其他现代写作。
在您的示例中,您遇到了一个有趣的案例:抽象字符串 "x-xxmessage-id:"
根据标点符号拆分,而孤立的小写字符串 "id"
拆分为 "i"
和"d"
,因为在书面文本中,它最常见的是 "I'd" 或 "i'd" 的替代拼写("I could"、"I would" 等)。您可以找到相应的规则 here.
如果您要处理与常规自然语言文本有很大不同的特定文本,您通常需要 customise the tokenization rules or possibly even add a Language
subclass for your own custom "dialect". If there's a fixed number of cases you want to tokenize differently that can be expressed by rules, another option would be to add a component to your pipeline that
最后,您也可以尝试使用 language-independent xx
/ MultiLanguage
class 代替。它仍然包含非常基本的标记化规则,例如标点符号拆分,但 none 特定于英语的规则。
from spacy.lang.xx import MultiLanguage
nlp = MultiLanguage()