制作一个程序,将句子压缩成独特的单词和位置

时间:2017-01-16 17:46:12

标签: python python-3.x text text-files

我目前正在用Python创建一个程序,它将用户输入句子压缩成一个独特的单词和位置列表。例如句子"问你的国家可以做什么,因为你问你可以为你的国家做些什么"将被压缩为"不是你的国家可以为你做什么"并且职位将是" 12345678913967845"。

然后可以从这些独特的单词和位置重新创建原始句子。

我的问题是我目前卡住了,我有压缩部分工作,但是我真的不确定如何解压缩句子。我的意思是我知道如何阅读文本文件,但不知道如何通过独特的单词和位置重新创建原始句子。

这是我目前的代码:

###This section will compress the sentence(s)###
        txt_file = open("User_sentences.txt","wt")
        user_sntnce = input(str("\nPlease enter the sentence(s) you would\nlike compressed.\n\n➜ "))
        user_sntnce_list = user_sntnce.split(" ")                     
        print(user_sntnce_list)

        for word in user_sntnce_list: 
            if word not in uq_words:
                uq_words.append(word)
        txt_file.write(str(uq_words) + "\n")

        for i in user_sntnce_list:
            positions = int(uq_words.index(i) + 1)
            index.append(positions)
            print(positions)
            print(i)
            txt_file.write(str(positions))
    txt_file.close()
###This section will DECOMPRESS the sentence(s)###
    if GuideChoice == "2":
        txt_file = open("User_sentences.txt","r")
        contents = txt_file.readline()
        words = eval(contents)
        print(words)
        txt_file.close()

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您可以将句子按空格分成列表,然后枚举该列表并将位置存储在defaultdict中,这样您就可以创建每个单词的位置列表(另外,您也不需要)将一个空间分成几个部分):

from collections import defaultdict

positions = defaultdict(list)
user_sentence = 'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY'
sentence = user_sentence.split()
for position, word in enumerate(list(sentence), start=1):
    positions[word].append(position)

结果是:

defaultdict(<class 'list'>, {'WHAT': [3, 11], 'ASK': [1, 10], 'COUNTRY': [5, 17], 'NOT': [2], 'CAN': [6, 13], 'FOR': [8, 15], 'DO': [7, 14], 'YOU': [9, 12], 'YOUR': [4, 16]})