【问题标题】:Stripping duplicate words from generated text in python script从python脚本中生成的文本中去除重复的单词
【发布时间】:2012-12-03 06:50:53
【问题描述】:

我制作了一个 Python 脚本,用于从输入文件中获取文本,并根据剪切技术 (http://en.wikipedia.org/wiki/Cut-up_technique) 为创意写作项目随机重新排列单词。

这是当前的脚本。注意:我将其作为服务器端包含运行。

#!/usr/bin/python
from random import shuffle 

src = open("input.txt", "r")
srcText = src.read()
src.close()

srcList = srcText.split()
shuffle(srcList)
cutUpText = " ".join(srcList)
print("Content-type: text/html\n\n" + cutUpText)

这基本上完成了我希望它完成的工作,但我想做的一项改进是识别输出中的重复单词并将它们删除。为了澄清,我只想识别序列中的重复项,例如“the the”或“I I I”。我不想这样,例如,“the”在整个输出中只出现一次。

有人能指出我开始解决这个问题的正确方向吗? (我的背景根本不是编程,所以我基本上是通过大量阅读python手册和浏览这个网站来整理这个脚本。请对我温柔。)

【问题讨论】:

  • 你介意在维基百科的公共领域分享你的代码吗?你不必这样做。
  • 当然不是!随意用它做任何你喜欢的事情。
  • 作为一个业余作家,我从“创意写作”的角度欣赏这个问题; SO可以是教育性的,或者什么。谢谢。
  • 只是想说我在维基百科上看到了你的脚本版本。非常感谢,我非常受宠若惊,我在无知中拼凑起来的脚本可以用来制作更适合大众消费的东西。

标签: python string text duplicates


【解决方案1】:

您可以编写一个生成器来生成没有重复的单词:

def nodups(s):
    last = None
    for w in s:
        if w == last:
            continue
        yield w
        last = w

然后你可以在你的程序中使用它:

cutUpText = " ".join(nodups(srcList))

【讨论】:

  • 做到了!非常感谢,我没想到会有一个完整的例子,只是一点指导。 (我通过在脚本前面将输入删除为小写来解决这个区分大小写的问题,因为它被设计成全部小写,以避免在句子中间随机大写单词。)
  • 我发现您必须对列表进行“排序”,并调用 nodups() 生成器,尤其是在“shuffle”位之前以有效消除重复项。
  • @Arcturus:你的需求肯定与文化不同。他只是不想连续重复单词,但可以在文本中的某处重复。
  • 当然;这确实是使用生成器的一个非常相关的例子——比我读过的任何文本都好。
【解决方案2】:

添加线条

spaces = [(i%10) == 9 and '\n' or ' ' for i in range(0,len(srcList))];
cutUpText = "".join(map(lambda x,y: "".join([x,y]),srcList,spaces));

有助于为文本屏幕带来一些原始格式。

【讨论】:

    【解决方案3】:

    将此添加到您现有的程序中:

    srcList = list(set(srcText.split()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2016-01-24
      相关资源
      最近更新 更多