如何构建文本单词词典



我将如何返回一个字典,其中键是给定文本中的单词,值是文本中先前单词的列表?

例如

text = "hi my name is"    
get_previous_words_dict(text):

打印字典:

>>> my_dict['hi']
[]
>>> my_dict['my']
['hi']    
>>> my_dict['name']
['hi', 'my']

正如@cjds指出的那样,这只有在句子中的单词是唯一的时才有意义。此外,第一个单词的值肯定应该是一个空列表,而不是包含空字符串的列表。以下内容将符合此规范:

def get_previous_words_dict(text):
    words = []
    dictionary = {}
    for word in text.split():
        dictionary[word] = words[:]
        words.append(word)
    return dictionary

要了解的最重要的事情是作业:

dictionary[word] = words[:]

这样做的效果是复制单词数组。如果是正常作业:

dictionary[word] = words

然后,这只会使每个字典条目引用相同的words列表,因此在循环结束时,字典中的每个条目都将包含所有单词。

>>> t="hi my name is"
>>> li=t.split()

您可以使用字典理解:

>>> {w:[li[si] for si in range(i-1,-1,-1)] for i, w in enumerate(li)}
{'is': ['name', 'my', 'hi'], 'hi': [], 'my': ['hi'], 'name': ['my', 'hi']}

或者,向上计数:

>>> {w:[li[si] for si in range(0,i)] for i, w in enumerate(li)}
{'is': ['hi', 'my', 'name'], 'hi': [], 'my': ['hi'], 'name': ['hi', 'my']}

或者使用切片而不是嵌套列表理解

>>> {w:li[0:i] for i, w in enumerate(li)}
{'is': ['hi', 'my', 'name'], 'hi': [], 'my': ['hi'], 'name': ['hi', 'my']}

如果我要从头开始实现:

使用哈希来存储单词,这用作字典。插入到哈希中时,插入为键 => [哈希中的先前键]。

  1. 将句子拆分为单词:

    sentence_words = sentence.split(' ')
    
  2. 创建一个字典,其中键是单词,值是从该单词的开头到该单词位置的sentence_words切片。

    d = {w: sentence_words[:i] for i, w in enumerate(sentence_words)}
    

示例代码

sentence = "Hi my name is John"
sentence_words = sentence.split(' ')
d = {w: sentence_words[:i] for i, w in enumerate(sentence_words)}

最新更新