从文本文件中解析唯一单词

2023-12-03

我正在开发一个项目,从大量文本文件中解析出唯一的单词。我已经完成了文件处理,但我正在尝试改进解析过程。每个文件都有一个特定的文本段,以我在实时系统上使用正则表达式捕获的某些短语结尾。

解析器应该遍历每一行,并根据 3 个标准检查每个单词:

  1. 长度超过两个字符
  2. 不在预定义的字典集中dict_file
  3. 尚未在单词列表中

结果应该是一个二维数组,每行是每个文件的唯一单词列表,使用以下命令将其写入 CSV 文件.writerow(foo)处理每个文件后的方法。

我的工作代码如下,但速度缓慢且混乱,我错过了什么?

我的生产系统运行的是 2.5.1,仅包含默认模块(因此 NLTK 是不行的),无法升级到 2.7+。

def process(line):
    line_strip = line.strip()
    return line_strip.translate(punct, string.punctuation)

# Directory walking and initialization here
report_set = set()
with open(fullpath, 'r') as report:
    for line in report:
        # Strip out the CR/LF and punctuation from the input line
        line_check = process(line)
        if line_check == "FOOTNOTES":
            break
        for word in line_check.split():
            word_check = word.lower()
            if ((word_check not in report_set) and (word_check not in dict_file) 
                 and (len(word) > 2)):
                report_set.append(word_check)
report_list = list(report_set)

编辑:根据 steveha 的建议更新了我的代码。


一个问题是,一个in测试一个list是慢的。你可能应该保留一个set记录您所看到的单词,因为in测试一个set速度非常快。

Example:

report_set = set()
for line in report:
    for word in line.split():
        if we_want_to_keep_word(word):
            report_set.add(word)

然后当你完成后: 报告列表 = 列表(报告集)

任何时候你需要强制set into a list, 你可以。但如果你只需要循环它或做in测试,您可以将其保留为set;这是合法的for x in report_set:

另一个可能重要也可能不重要的问题是,您使用以下命令一次性从文件中读取所有行:.readlines()方法。对于非常大的文件,最好只使用打开的文件句柄对象作为迭代器,如下所示:

with open("filename", "r") as f:
    for line in f:
        ... # process each line here

一个大问题是我什至不知道这段代码是如何工作的:

while 1:
    lines = report.readlines()
    if not lines:
        break

这将永远循环。第一个语句用以下命令吸食所有输入行.readlines(),然后我们再次循环,然后下一次调用.readlines() has report已经筋疲力尽了,所以打电话给.readlines()返回一个空列表,从而跳出无限循环。但是现在我们刚刚读到的所有行都丢失了,其余的代码必须用一个空的lines多变的。这是如何运作的?

所以,摆脱整个while 1循环,并将下一个循环更改为for line in report:.

另外,你真的不需要保留count多变的。您可以使用len(report_set)随时查出有多少个单词set.

另外,还带有一个set你实际上不需要检查一个单词是否是in集合;你可以随时打电话report_set.add(word)如果它已经在set不会再添加了!

另外,你不have按照我的方式来做,但我喜欢制作一个可以完成所有处理的生成器。剥离行、翻译行、按空格分割,然后生成可供使用的单词。我也会强制这些词小写,除非我不知道这是否重要FOOTNOTES仅以大写形式检测。

因此,将以上所有内容放在一起,您将得到:

def words(file_object):
    for line in file_object:
        line = line.strip().translate(None, string.punctuation)
        for word in line.split():
            yield word

report_set = set()
with open(fullpath, 'r') as report:
    for word in words(report):
        if word == "FOOTNOTES":
            break
        word = word.lower()
        if len(word) > 2 and word not in dict_file:
            report_set.add(word)

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

从文本文件中解析唯一单词 的相关文章

  • 如何并排绘制具有相同 X 坐标的条形图(“闪避”)

    import matplotlib pyplot as plt gridnumber range 1 4 b1 plt bar gridnumber 0 2 0 3 0 1 width 0 4 label Bar 1 align cente
  • 在二维数组中进行所有可能的组合

    我正在尝试制作具有所有可能组合的 4x4 16 像素黑白图像数组 我制作了以下数组作为模板 template 0 0 0 0 start with all white pixels 0 0 0 0 0 0 0 0 0 0 0 0 然后我想迭
  • 在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

    使用 SQLAlchemy 我执行如下查询 import models as m import sqlalchemy as sa s session maker q s query m ShareCount m Article join m
  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • 我可以在 matplotlib 中的绘图左侧放置一个垂直颜色条吗?

    来自颜色条方法的 matplotlib 命令摘要 http matplotlib org api pyplot api html highlight colorbar matplotlib pyplot colorbar我知道关键字参数or
  • Discord.py 斜线命令在 cogs 中不起作用

    我正在构建一个不和谐的机器人 并且想要在 cogs 内使用斜杠命令 但这些命令不显示或工作 这是代码 cog guild ids 858573429787066368 861507832934563851 class Slash comma
  • NumPy 数组与 SQLite

    我在 Python 中见过的最常见的 SQLite 接口是sqlite3 但是有什么东西可以很好地与 NumPy 数组或 rearray 配合使用吗 我的意思是 它可以识别数据类型 不需要逐行插入 并提取到 NumPy rec 数组中 有点
  • pandas 数据框的最大大小

    我正在尝试使用读取一个有点大的数据集pandas read csv or read stata功能 但我不断遇到Memory Errors 数据帧的最大大小是多少 我的理解是 只要数据适合内存 数据帧就应该没问题 这对我来说不应该是问题 还
  • lmfit模型拟合然后预测

    我正在领养lmfit进行曲线拟合并使用拟合模型进行预测 然而下面的代码并没有达到我想要的效果 能否请你帮忙 谢谢 import numpy as np from lmfit import Model def linearModel x a0
  • 使用 python 从 CSV 创建字典

    我有一个 CSV 格式的文件 其中 A B 和 C 是标题 我如何以Python方式将此CSV转换为以下形式的字典 A 1 B 4 C 7 A 2 B 5 C 8 A 3 B 6 C 9 到目前为止我正在尝试以下代码 import csv
  • Python FTP下载550错误

    我编写了一个 ftp 爬虫来下载特定文件 它会一直工作 直到找到要下载的特定文件 然后抛出此错误 ftplib error perm 550 该文件存在于我的下载文件夹中 但文件大小为 0 kb 我需要转换某些内容才能下载吗 我可以访问 f
  • 当元组列表中相同项目的值是字符串时,对它们的值求和

    如果我有这样的元组列表 my list books 5 books 10 ink 20 paper 15 paper 20 paper 15 我怎样才能把列表变成这样 books 15 ink 20 paper 50 即添加同一项目的费用
  • Kivy TextInput 水平和垂直对齐(文本居中)

    如何在 Kivy 的 TextInput 中水平居中文本 I have the following screen But I want to centralize my text like this 这是我的 kv 语言的一部分 BoxLa
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • 如何在类型提示中定义元组或列表的大小

    有没有办法在参数的类型提示中定义元组或列表的大小 目前我正在使用这样的东西 from typing import List Optional Tuple def function name self list1 List Class1 if
  • 为什么我会在 Python 字符串格式中使用除 %r 之外的其他内容?

    我偶尔会使用 Python 字符串格式 这可以像这样完成 print int i Float f String s 54 34 434 some text 但是 这也可以这样做 print int r Float r String r 54
  • 本地主机上的 Google App Engine GQL 查询

    我正在 Google App Engine Windows 上的 SDK 版本 1 7 0 上开发一个应用程序 我需要经常测试该应用程序 并且此测试涉及数据存储上的大量 GQL 查询 您可以在 App Engine 管理界面的浏览器中在线运
  • 如何使用 python 模块的多个 git 分支?

    我想使用 git 来同时处理我正在编写的模块中的多个功能 我目前正在使用 SVN 只有一个工作区 因此我的 PYTHONPATH 上只有该工作区 我意识到这不太理想 所以我想知道是否有人可以建议一种更 正确 的方法来做到这一点 让我用一个假
  • 如何仅读取 CSV 文件每行的第一列 [重复]

    这个问题在这里已经有答案了 如何在Python中读取CSV文件每行的第一列 我的数据是这样的 1 abc 2 bcd 3 cde 我只需要循环第一列的值 另外 当我在 calc 中打开 csv 文件时 每行中的数据都在同一个单元格中 这正常
  • 在Python中使用os.makedirs创建目录时出现权限问题

    我只是想处理上传的文件并将其写入工作目录中 该目录的名称是系统时间戳 问题是我想以完全权限创建该目录 777 但我不能 使用以下代码创建的目录755权限 def handle uploaded file upfile cTimeStamp

随机推荐

  • 使 openGL 线连接起来

    现在我创建了一个多边形 然后我做了同样的事情 但使用 line loop 来绘制轮廓 我现在的问题是 如果我将线条粗细设置为高 则线条不会连接 它们的末端需要更长 线宽 有没有办法解决这个问题 Thanks glMatrixMode GL
  • Rails 条件验证

    所以我这里有两个模型 class Screen lt ActiveRecord Base belongs to user validates screen size numericality gt less than or equal to
  • 在 c 可执行文件中运行数据 shellcode

    我正在研究这个c 程序 我在 64 位 x64 linux 上用 gcc 编译它 include
  • 新的 React Context API 是否会触发重新渲染?

    我一直在尝试理解新的 React Context API 并正在使用它 我只是想检查一个简单的情况 当提供者的数据更新时 所有内容都会重新呈现 Check Codesandbox 上的这个小例子 所以 在我的例子中 我有一个App组件 具有
  • Paypal 支付 REST API Web 体验配置文件

    我正在使用 PayPal Rest API 并将 PayPal 与付款集成 我设法使用以下代码创建网络体验配置文件 但我无法运行此代码 2 次 它表示该配置文件已存在 这是否意味着我必须创建一个配置文件并将其用于所有客户和所有交易 Web
  • hbase 扫描仪的排序结果

    如何以相同的任何排序顺序检索 hbase 列族 值 like列族 值 列 1 1列 3 2列 4 3列 2 4 HBase 本身不会这样做 相反 您可以使用 Result raw 1 方法检索 KeyValues 列表 将其放入 List
  • F# 匹配两个值

    我对 F 相当陌生 我想使用 match with 语法比较两个值 当我尝试比较两个值时 问题就出现了 如下所示 let value1 19 let isValue1 y match y with value1 gt y 1 gt y 我收
  • 如果存在可能的未定义行为,为什么编译器不会警告您?

    我正在读著名的未定义的行为可能导致时间旅行发帖并注意到这部分 首先 您可能会注意到循环中的逐一错误 控制 结果是该函数读取了超过末尾的一位 放弃之前的表数组 经典编译器不会 特别关心 它只会生成代码来读取 越界数组元素 尽管事实上这样做是
  • C#:如何将组合框等项目列表保存到 .NET 设置文件中?

    C 如何将组合框等项目列表保存到 NET 设置文件中 设置设计器允许您使用的唯一集合类型是 System Collections ArrayList 如果您确实使用 ArrayList 则其所有元素的类型都必须是可序列化的 具有 Seria
  • 遗留 C/C++ 项目中的死代码检测 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 您将如何进行 C C 代码中的死代码检测 我有一个相当大的代码库可供使用 并且至少 10 15 是死代码 有没有基于 Unix 的工具来识别这个区域
  • mongodb 和 mongomapper

    我有一个 Rails 应用程序 当前使用 activerecord 来存储和查询产品 每个产品都有一个类别和子类别 每个子类别由我可以在应用程序中创建的多个字段定义 由此 当用户想要输入特定产品时 他们会被按下相关的表单字段 这已经变得非常
  • 贝宝集成问题

    我无法弄清楚我的代码做错了什么 我收到错误 我们检测到该购物车存在问题 如果问题仍然存在 请联系商家 这是我正在提交的表格
  • python内部类的用途是什么?

    Python 的内部 嵌套类让我很困惑 有什么事情是没有他们就无法完成的吗 如果有的话 那是什么东西 引自http www geekinterview com question details 64739 内部类的优点 类的逻辑分组 如果一
  • 用鼠标移动绘制的线

    我试图通过用鼠标抓住一条绘制的线来移动它 这条线已经画好了Graphics DrawLine Pen P Point A Point B 创建线条并将其绘制在表单上绝对没有问题 我试过了 将行添加到GraphicsPath 这甚至没有划清界
  • Bootstrap 导航栏下拉菜单项右侧

    如下图所示 当我单击响铃图标时 图标的右下角会出现一个下拉菜单 我希望这个下拉菜单出现在左下角而不是右下角 我应该怎么办
  • CouchDB 使用什么加密机制?

    有谁知道 CouchDB 使用什么类型的加密来安全地存储数据 如何更改 控制 CouchDB 上的这种数据安全加密机制 CouchDB 不会通过加密方式加密静态数据 密码除外 PBKDF2单向哈希 它确实允许通过使用对传输中的数据进行加密H
  • 为多台服务器设置 DiscordBot 的频道 ID

    有人可以帮我设置命令来设置特定服务器的频道吗 这样就不会互相干扰 其实我有这个 var testChannel bot channels find channel gt channel id hereMyChannelID 我想设置所有者可
  • 本地化 Windows Phone 8“应用程序标题”和“平铺标题”字符串

    我有一个简单的 Windows Phone 8 WP8 应用程序 我通过修改 AppResources resx 创建西班牙语版本来对其进行本地化 问题是 WMAppManifest xml 上的 应用程序标题 和 平铺标题 仍采用默认语言
  • Jetty 8 网络套接字

    我已经下载了最新的 Jetty 8 Hightide 但无法使 WebSockets 工作 我解压缩发行版 将 war 文件放入 webapps 文件夹中并启动 java lang NoClassDefFoundError org ecli
  • 从文本文件中解析唯一单词

    我正在开发一个项目 从大量文本文件中解析出唯一的单词 我已经完成了文件处理 但我正在尝试改进解析过程 每个文件都有一个特定的文本段 以我在实时系统上使用正则表达式捕获的某些短语结尾 解析器应该遍历每一行 并根据 3 个标准检查每个单词 长度