将字符串标记转换为整数

Converting string tokens into integers

我正在尝试将句子的标记转换为整数。但它给了我花车。

from nltk.tokenize import word_tokenize
from gensim.models import Word2Vec

sometext = "hello how are you doing?"

tokens = word_tokenize(sometext)
model = Word2Vec([tokens], min_count=1, size=1)

当我这样做时,

print(model["hello"])

它给了我,

[-0.3843384]

我希望这是一个正整数。

没有必要为此使用 Word2VecWord2Vec的要点是将单词映射到multi-dimensional、"dense"向量,有很多floating-point坐标。

虽然 Word2Vec 碰巧扫描你的训练语料库以查找所有独特的词,并为每个独特的词在其内部 data-structures 中指定一个整数位置,但你通常不会只制作 one-dimension (size=1),或者向模型询问单词的整数槽(内部实现细节)。

如果你只需要一个 (string word)->(int id) 映射,gensim class Dictionary 可以做到。参见:

https://radimrehurek.com/gensim/corpora/dictionary.html

from nltk.tokenize import word_tokenize
from gensim.corpora.dictionary import Dictionary

sometext = "hello how are you doing?"

tokens = word_tokenize(sometext)
my_vocab = Dictionary([tokens])

print(my_vocab.token2id['hello'])

现在,如果确实有使用 Word2Vec 的正当理由 – 例如需要多维向量来获取更大的词汇量,在大量不同的文本上进行训练 – 而您真正需要的是了解 its 用于单词的内部整数槽,您可以通过内部 wv 属性 的 vocab 字典访问它们:

print(model.wv.vocab['hello'].index)

您可以使用 gensim corpora.Dictionary 为令牌创建字典和 ID。

from gensim import corpora
dictionary = corpora.Dictionary([tokens])
print(dictionary)
Dictionary(6 unique tokens: ['?', 'are', 'doing', 'hello', 'how']...)
token2id
print(dictionary.token2id)
{'?': 0, 'are': 1, 'doing': 2, 'hello': 3, 'how': 4, 'you': 5}
dictionary.token2id['hello']
3