我一直在寻找如何编写一个程序,用它的顺序和单个单词重新创建一个句子。
单个单词以这种格式存储在文件中:
i am what so deal with it
并且订单也在一个单独的文件中:
1 2 3 1 2 4 5 6 7
最后它应该成为句子:
>>>i am what i am so deal with it
抱歉,但我无法输入尝试的代码,因为我无法找到如何执行此操作。
答案 0 :(得分:2)
我会这样做。
In [4]: order = "1 2 3 1 2 4 5 6 7"
In [5]: words = "i am what so deal with it"
In [6]: word_list = words.split()
In [7]: word_list
Out[7]: ['i', 'am', 'what', 'so', 'deal', 'with', 'it']
In [8]: order = map(lambda x: int(x)-1, order.split())
In [9]: order
Out[9]: [0, 1, 2, 0, 1, 3, 4, 5, 6]
In [10]: " ".join([word_list[i] for i in order])
Out[10]: 'i am what i am so deal with it'
我在In [8]: order = map(lambda x: int(x)-1, order.split())
中减去1,因为python中的列表从0开始编码。上面的代码使用内置函数(int
,join
,map
和split
所以请参考Python文档来了解它们究竟是做什么的。
答案 1 :(得分:1)
通常有用的缓解索引不匹配的方法是在字库中添加0索引的虚拟条目(在python代码中),以便从用于构建句子的select索引文件中基于1的索引直接用于构造读取索引文件时的句子序列。
因此我建议尝试:
#! /usr/bin/env python
from __future__ import print_function
word_base = None
with open('so_word_base.txt', 'rt') as f_base:
word_base = [None] + [z.strip() for z in f_base.read().split()]
sentence_seq = None
with open('so_select_indices.txt', 'rt') as f_select:
sentence_seq = [word_base[int(i)] for i in f_select.read().split()]
print(' '.join(sentence_seq))
使用单词“atoms”(so_word_base.txt)的文件:
i am what so deal with it
以及用于选择索引到该单词“base”的文件(so_select_indices.txt):
1 2 3 1 2 4 5 6 7
这会产生:
i am what i am so deal with it
请注意,这与建议的其他解决方案一样脆弱,应该没问题,因此OP学习如何实现如应用程序这样的最小数据库; - )
有人可能会尝试在更健壮的代码中测试显式设置的None
变量,尝试在文件不存在时捕获异常,或者不允许读取或不能成功解析。
答案 2 :(得分:0)
更多“初学者友好”的解决方案:
words = open("words.txt",'r').read().split()
order = open("order.txt",'r').read().split()
result = ""
for i in order:
result+= words[int(i)-1] + " "
print(result)
,结果是一样的:
i am what i am so deal with it
答案 3 :(得分:0)
您可以使用枚举来获取单词的当前位置,然后创建字典。要阅读文件,您可以使用以下内容:
with open('file1.txt', 'r') as f:
string = f.read()
with open('file2.txt', 'r') as f:
order = [int(i) for i in f.read().split()]
然后重新排序:
string = "i am what so deal with it"
order = [1, 2, 3, 1, 2, 4, 5, 6, 7]
string = string.split()
indexDict = {i:j for i,j in enumerate(string)}
newString = ' '.join([indexDict[i-1] for i in order])
输出:
>>> newString
'i am what i am so deal with it'