我想取一个单词数组,然后转换成一堆整数,这样一些唯一的整数k
对应一些独特的单词j
。
示例:
句子:"The cat sat on the mat"
数字格式:1 2 3 4 1 5
这在Python中是否可行,如果是这样,我该怎么做?
答案 0 :(得分:4)
您可以使用计数器和字典执行此操作:
index = 1
word_to_index = {}
for word in sentence.split():
if word in word_to_index:
# already seen
continue
word_to_index[word.lower()] = index
index += 1
这为每个(小写)单词分配一个唯一索引;现在您可以使用它们输出您的数字:
print sentence
for word in sentence.split():
print word_to_index[word.lower()],
如果您想使用更多Python标准库魔法,请使用collections.defaultdict()
object并结合itertools.count()
:
from collections import defaultdict
from itertools import count
word_to_index = defaultdict(count(1).next)
print sentence
for word in sentence.split():
print word_to_index[word.lower()],
对于Python 3,您必须使用count(1).__next__
,以及使用print()
作为函数(print(word_to_index[word.lower()], end=' ')
)的更明显的转换。
这将为每个单词自动生成索引。演示后一种方法:
>>> from collections import defaultdict
>>> from itertools import count
>>> sentence = "The cat sat on the mat"
>>> word_to_index = defaultdict(count(1).next)
>>> print sentence
The cat sat on the mat
>>> for word in sentence.split():
... print word_to_index[word.lower()],
...
1 2 3 4 1 5
答案 1 :(得分:1)
import collections
import itertools
c = itertools.count()
answer = collections.defaultdict(c.__next__)
for word in sentence.lower().split():
answer[word]
输出:
In [29]: answer
Out[29]: defaultdict(<method-wrapper '__next__' of itertools.count object at 0x10a420c08>, {'mat': 4, 'sat': 2, 'the': 0, 'on': 3, 'cat': 1})
打印出指数:
for word in sentence.lower().split():
print(answer[word], end=' ')
输出:
0 1 2 3 0 4
当然,您可以通过将默认参数更改为1
来使索引从itertools.count
开始:itertools.count(1)
答案 2 :(得分:0)
您可以通过列出句子中的唯一单词,然后逐字逐句查找该单词并查找该单词在该列表中的位置来实现此目的。
sentence = "The cat sat on the mat"
words_in_sentence = sentence.lower().split()
unique_words = list(set(words_in_sentence))
print [unique_words.index(word) for word in words_in_sentence]