【问题标题】:Converting string tokens into integers将字符串标记转换为整数
【发布时间】:2019-10-31 16:12:53
【问题描述】:

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

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]

我希望这是一个正整数。

【问题讨论】:

  • 如果添加abs(your negative integer)会怎样?例如。 x = -1,然后是print(abs(x))

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


【解决方案1】:

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

虽然Word2Vec 碰巧会扫描您的训练语料库中的所有唯一单词,并为每个唯一单词在其内部数据结构中指定一个整数位置,但您通常不会制作只有一维的模型 (size=1 ),或者向模型询问单词的整数槽(内部实现细节)。

如果你只需要一个 (string word)->(int id) 映射,gensim 类 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——比如需要多维向量来获得更大的词汇量,并接受大量不同文本的训练——那么你真正需要的是知道它 单词的内部整数槽,您可以通过内部wv 属性的vocab 字典访问它们:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 2020-12-07
      • 2011-11-24
      • 1970-01-01
      • 2019-04-22
      • 2022-01-19
      • 2012-02-21
      • 2010-12-31
      相关资源
      最近更新 更多