Python 如何从Spacy库中的哈希值获取字符串?

Python 如何从Spacy库中的哈希值获取字符串?,python,nlp,spacy,Python,Nlp,Spacy,我在spaCy图书馆从事自然语言处理工作。如何从散列中获取字符串值 下面是我在python中使用spaCy库编写的详细代码 注意——这个问题主要与spaCy库有关,而不是python # import spacy package for english language from spacy.lang.en import English # initialize nlp with English nlp = English() # get hash from string cat_hash

我在spaCy图书馆从事自然语言处理工作。如何从散列中获取字符串值

下面是我在python中使用spaCy库编写的详细代码

注意——这个问题主要与spaCy库有关,而不是python

# import spacy package for english language
from spacy.lang.en import English

# initialize nlp with English
nlp = English()

# get hash from string
cat_hash = nlp.vocab.strings["cat"]
print(cat_hash)

# Look up the cat_hash to get the string
cat_string = nlp.vocab.strings[cat_hash]
print(cat_string)

这很有趣
nlp.vocab.strings
不包含英语语言的所有单词。
len(nlp.vocab.strings)
显示那里只有1009个单词-主要是虚词:代词、辅助动词等。你可以用

for s in nlp.vocab.strings:
     print(s)
现在,您仍然可以使用
nlp.vocab.strings[“cat”]
请求哈希值,但它不会向字符串添加“cat”,只返回其哈希值。这就是为什么查找
nlp.vocab.strings[cat_hash]
不起作用的原因——“cat”不在那里,它的hash也不在那里

通常,散列不是唯一的,因此不可反转。现在,您可以将word添加到StringStore(它得到的哈希值与独立于StringStore的哈希值相同),然后您就可以查找它了

>>> cat_hash = nlp.vocab.strings.add("cat")
>>> cat_hash
5439657043933447811
>>> nlp.vocab.strings[5439657043933447811]
'cat'
另外,您可能希望使用的是
nlp.vocab
,而不是
nlp.vocab.strings
<如果字典中没有字符串,则code>nlp.vocab会创建新条目,并且可以与哈希一起使用。但是,它不返回散列,而是返回一个
Lexeme
,它具有
text
orth
属性

>>> dog=nlp.vocab["dog"]
>>> dog.text
'dog'
>>> dog.orth
7562983679033046312
>>> nlp.vocab[7562983679033046312].text
'dog'
>>>