交换单词,但保留两个字符串之间的其他字符

时间:2019-06-12 18:16:38

标签: python string nlp

说我听了一句话,换了几句话。我从输入句子开始:

sentence = Wow, it felt so nice outside today!

然后我将其标记化并交换了一些单词。我剩下了一些新单词,例如:

['Hey', 'I', 'felt', 'somewhat', 'dreary', 'inside', 'today']

我想将此单词列表转换回原始格式,保留空格和特殊字符,并以如下字符串结尾:

Hey, I felt somewhat dreary inside today!

第一句话之间可以有任何类型的空格或特殊字符。有没有一种简单的算法可以做到这一点,希望不必逐个字符地遍历原始字符串?我正在使用Python。

请注意,重构的句子必须保留中间空格和标点符号,因此我不能仅使用join()函数。

2 个答案:

答案 0 :(得分:0)

import re
sentence = "Wow, it felt so nice outside today!"
new_word=re.findall(r"[\w']+|[.,!?; ]",sentence)

按订单更换。

 new_words=['Hey', ',', ' ', 'I', ' ', 'felt', ' ', 'somewhat', ' ', 'dreary', ' ', 'inside', ' ', 'today', '!']

如果您已对此顺序进行了排序,则此后可以使用它。

 print("".join(new_words))

答案 1 :(得分:0)

这就是我解决问题的方法:使用replace

for input_word, new_word in zip(input_words, new_words):
   raw_sentence = raw_sentence.replace(input_word, new_word, 1)
return raw_sentence

通过添加参数1,您可以指定仅在input_word中首次出现时替换raw_sentence

自从我打电话replace N次以来,这可能不是最有效的方法。这是最坏的情况O(N ^ 2),在O(N)中有更复杂的方法可以做到这一点。但是我并不太经常这样做,并且此代码可读性强。所以对我有用!