将字符串标记转换为整数

时间:2019-06-18 04:53:03

标签: python python-3.x nltk gensim word2vec

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

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]

我希望它是一个正整数。

2 个答案:

答案 0 :(得分:2)

没有必要使用Word2VecWord2Vec的重点是将单词映射到具有许多浮点坐标的多维“密集”向量。

尽管Word2Vec会扫描您的训练语料库以查找所有唯一词,并为每个唯一词在其内部数据结构中指定一个整数位置,但是您通常不会仅建立一维模型({ {1}},或向模型询问单词的整数槽(内部实现细节)。

如果只需要一个(字符串词)->(一个int id)映射,gensim类size=1可以做到这一点。参见:

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

Dictionary

现在,如果实际上有一些合理的理由要使用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属性的wv字典访问它们:

vocab

答案 1 :(得分:1)

您可以使用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