对于许多令牌属性,例如词性和依赖关系,spaCy既存储整数属性又存储字符串属性。例如,对于POS,有pos_
(如“ PUNCT”和“ ADJ”之类的字符串)和pos
(整数值)属性。令牌属性的完整列表为here。
是否有一种方便的方法可以在两种表示形式之间直接转换?具体来说,如果我有POS整数值,是否有办法知道对应的字符串是什么?
使用count_by
API(请参阅here)时遇到了这个问题,该API对属性频率进行计数并返回整数属性及其计数的字典。一个例子:
>>> doc = nlp("I like natural language processing.")
>>> doc.count_by(spacy.attrs.POS)
{96: 1, 99: 1, 83: 1, 91: 2, 94: 1}
是否可以为每个POS密钥获取相应的字符串?
当然,还有其他使用字符串属性进行计数的方法。但是我的问题比这个示例应用程序更笼统。
答案 0 :(得分:2)
是的,它是doc.vocab.strings
处的查找表。您可以使用例如查找字符串值或其哈希值doc.vocab.strings["VERB"]
或doc.vocab.strings[VERB]
。如果您有字符串并需要哈希,请使用spacy.strings.get_string_id()
函数。散列字符串是无状态的,因此不需要StringStore
。
还可以使用spacy.attrs.IDS
和spacy.symbols.IDS
全局变量来取消引用内置符号。