Python 文本中重复的短语

2023-11-29

我有一个问题,我不知道如何解决它。请给一个建议。

我有一条文字。好大好大的文字。任务是找到文本中所有长度为3(包含三个单词)的重复短语。


在我看来,你有两个问题。

第一个是提出一种标准化输入的有效方法。你说你想找到输入中的所有三词短语,但是短语是由什么组成的呢?例如,有the black dog and The black, dog?同一个短语?

正如 marcog 所建议的,做到这一点的一种方法是使用类似的东西re.findall。但这非常低效:它遍历您的整个输入并将单词复制到列表中,然后您必须处理该列表。如果您输入的文本很长,就会浪费时间和空间。

更好的方法是将输入视为流,并构建一个一次生成一个单词的生成器。下面是一个示例,它使用空格作为单词之间的分隔符,然后从单词中去除非字母字符并将它们转换为小写:

>>> def words(text):
       pattern = re.compile(r"[^\s]+")
       non_alpha = re.compile(r"[^a-z]", re.IGNORECASE)
       for match in pattern.finditer(text):
           nxt = non_alpha.sub("", match.group()).lower()
           if nxt:  # skip blank, non-alpha words
               yield nxt


>>> text
"O'er the bright blue sea, for Sir Joseph Porter K.C.B."
>>> list(words(text))
['oer', 'the', 'bright', 'blue', 'sea', 'for', 'sir', 'joseph', 'porter', 'kcb']

第二个问题是将规范化的单词分组为三词短语。同样,这里是生成器可以高效执行的地方:

>>> def phrases(words):
        phrase = []
        for word in words:
            phrase.append(word)
            if len(phrase) > 3:
                phrase.remove(phrase[0])
            if len(phrase) == 3:
                yield tuple(phrase)

>>> list(phrases(words(text)))
[('oer', 'the', 'bright'), ('the', 'bright', 'blue'), ('bright', 'blue', 'sea'), ('blue', 'sea', 'for'), ('sea', 'for', 'sir'), ('for', 'sir', 'joseph'), ('sir', 'joseph', 'porter'), ('joseph', 'porter', 'kcb')]

几乎可以肯定,该函数有一个更简单的版本,但这个版本非常高效,而且也不难理解。

值得注意的是,将生成器链接在一起仅遍历列表一次,并且不会在内存中构建任何大型临时数据结构。您可以使用结果来构建defaultdict按短语键入:

>>> import collections
>>> counts = collections.defaultdict(int)
>>> for phrase in phrases(words(text)):
        counts[phrase] += 1

这使得单次传递text因为它计算短语。完成后,查找字典中值大于 1 的每个条目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 文本中重复的短语 的相关文章

随机推荐

  • 无法在 bash 中执行双括号中的命令

    为了保持一致 我尝试在所有 if 语句中使用双括号 然而 当我要检查我想要运行的命令的返回值时 我确实遇到了问题 在测试了几种创建 if 语句的方法之后 我发现只有没有括号才能执行命令 以下不起作用 if command then echo
  • Rustc/LLVM 为 aarch64 生成错误代码,opt-level=0

    我有两个文件被组装 编译 链接到简约内核中 start s set CPACR EL1 FPEN 0b11 lt lt 20 set BOOT STACK SIZE 8 1024 global boot stack global start
  • geom_bar(aes = ) 和position_dodge(width = ) 中的“width =”以什么单位呈现?

    我想在其中一个躲避的栏上专门放置一些东西 我怎样才能做到这一点 在下面的示例中 我想在条形图的 cat3 组中的 A3 上专门分层一些内容 我知道 cat3 的 x 3 但由于闪避宽度和条宽度的相互依赖性 似乎很难瞄准该条 有没有可以用来计
  • Gradle Java 应用程序的 Proguard 示例

    我是混淆新手 并试图弄清楚如何混淆使用 gradle 创建的 java 应用程序 这个想法是混淆 gradle 构建后创建的可运行 jar 这是 gradle 文件 plugins Apply the java plugin to add
  • 如何在 C# 中连接 WAV 文件

    我有 2 个 wav 文件 我想将它们连接成一个带有两个音轨的文件 是否有任何用于该任务的 API 或 NET 中的一些内置命令 我可以使用它们以某种天才的方式来使该任务成为可能 非常感谢您的帮助 如果我没有记错的话 您可以将第二个文件中的
  • 未来的建造者会在每个设定状态上不断重建

    我正在构建一个使用 api 的应用程序 并且我正在使用 future 构建器来获取数据 但问题是当状态更改时它会重建 我想防止这种情况发生 Thanks 尝试使用这个 class Example extends StatefulWidget
  • 将 XmlHttpRequest 解析为 XmlListModel

    我想将检索到的 xmlHttpRequest 对象放入 XMLListModel 中 我正在使用 qml 主要目标是评估我获得的 xml 并显示列表中的条目 如果有更好的方法 请告诉我 我在这里找到了一个用于分析 xml 的 解决方案 ht
  • Android Studio无法加载项目

    更新最新的Android studio后 我无法再加载项目了 并且错误消息 无法加载项目 com intellij ide plugins PluginManager StartupAbortedException 致命 初始化 com i
  • 将 .XLSX 转换为 Google Sheet 并移动转换后的文件的脚本

    我知道可以使用脚本和驱动 API 将 Excel 文件转换为 Google Sheets 但我正在寻找脚本来转换 Excel 工作表并将转换后的文件移动到其他文件夹 所以需要的步骤如下 将 Excel xls xlsx 从文件夹 A 转换为
  • 即使我运行程序时也获得不同的线程顺序

    有人可以告诉我线程开始执行的顺序吗 我写了下面的代码 class NewThread implements Runnable Thread t NewThread creating a second thread t new Thread
  • 值类中的验证

    SIP 15 意味着可以使用值类别来定义新的数字类别 例如正数 是否可以在没有构造函数的情况下编写底层 gt 0 的约束 而不必调用单独的方法来验证约束 即 创建此类的有效实例是简洁的 如果值类具有构造函数的概念 那么这可能是进行如下验证的
  • Laravel 资源 URL 忽略 https

    我在模板中使用以下代码来加载 CSS 文件 如果我在本地计算机上通过 https 查看页面 则指向 app css 文件的链接也是 https 但是在我的实时服务器上 这种情况不会发生 如果你查看现场直播通过 https 并查看源代码 您可
  • 延续和回调有什么区别?

    我一直在浏览整个网络 寻找有关延续的启示 令人难以置信的是 最简单的解释竟然能让像我这样的 JavaScript 程序员完全困惑 当大多数文章用Scheme 中的代码解释延续或使用monad 时尤其如此 现在我终于认为我已经理解了延续的本质
  • 如何在 pyspark 数据框中创建连续数字列?

    我想创建带有连续数字的列pyspark从指定编号开始的数据帧 例如 我想添加列A到我的数据框df这将从5到我的数据帧的长度 增加一 所以5 6 7 length df 一些简单的解决方案使用pyspark方法 您可以使用以下方法执行此操作r
  • 如何从 php API 运行 casperJS 脚本

    我有一个 casperJS 脚本 通过命令行运行时会返回 JSON 我想最好在 PHP 中创建一个 API 它在命令行 casperJS Sample js 中运行脚本并返回 JSON 作为结果 您可以使用php casperjs库是一个简
  • 将双空格替换为单空格

    如何使用 C 将双空格替换为单空格 ex 1 2 3 4 5 gt 1 2 3 4 5 这就是我到目前为止所做的 int tmain int argc TCHAR argv string line ifstream myfile myFil
  • 使用 C# 或经典 ASP (VBScript) 从 PDF 中提取文本的好方法是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有没有一个好的库可以从 PDF 中提取文本 如果需要的话我愿意付出代价 与 C 或经典 ASP VBScript 一起使用的东西将是理想的 我还需要
  • 如何使用 3d 数组和 2d 数组 numpy 进行掩码

    如何使用 1d 数组从 3d 数组中选择一组元素 These are my 3 data types A numpy ndarray numpy ndarray float B1 numpy ndarray numpy ndarray nu
  • XML DOM 设置文本内容

    我需要将一个大 XML 拆分为许多 child xml 文件 除了更改值之外 我的代码可以正常工作 我需要插入我的字符串Titleproper Bla bla text
  • Python 文本中重复的短语

    我有一个问题 我不知道如何解决它 请给一个建议 我有一条文字 好大好大的文字 任务是找到文本中所有长度为3 包含三个单词 的重复短语 在我看来 你有两个问题 第一个是提出一种标准化输入的有效方法 你说你想找到输入中的所有三词短语 但是短语是