【问题标题】:Swap words but preserve other characters between two strings交换单词但保留两个字符串之间的其他字符
【发布时间】:2019-10-27 07:40:39
【问题描述】:

假设我取了一个句子并换了一些单词。我从一个输入句开始:

sentence = Wow, it felt so nice outside today!

然后我将它标记化并换掉了一些单词。我留下了一个新词列表,例如:

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

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

Hey, I felt somewhat dreary inside today!

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

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

【问题讨论】:

  • 如果 x=['a','b'] 则 ''.join(x) 返回 'ab'
  • 不是 100% 我知道你想要什么。输入是实际的“input()”吗?如果是这样,那会使我的下一步变得更加困难。如果您有预设的句子并且简单地想换出一两个单词。您可以有一个数组,然后使用随机选择一个。然后,您可以将替换为 with 的句子放在 f 字符串中。 f“哇,今天在外面感觉好{my_str}!”

标签: python string nlp


【解决方案1】:
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))

【讨论】:

    【解决方案2】:

    这就是我解决问题的方法:使用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 中。

    可能不是最有效的方式,因为我调用了 N 次 replace。这是最坏的情况 O(N^2),在 O(N) 中有更复杂的方法可以做到这一点。但我不经常这样做,而且这段代码可读性很强。所以它对我有用!

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2022-08-04
      • 1970-01-01
      相关资源
      最近更新 更多