【问题标题】:Reading text file into python将文本文件读入python
【发布时间】:2014-08-06 06:17:01
【问题描述】:

我正在寻找一种更有效的方式将文本数据加载到 Python 中,而不是使用 .readlines(),然后手动解析数据。我的目标是在文本上运行不同的模型。

我的分类器是人们的名字,它们列在他们的文字之前......让我们称之为“评论”......它们用***分隔。下面是一个txt文件的例子:

Mike P,评论,2013 年 12 月
Mike P,评论,2013 年 6 月
Tom A,评论,2013 年 12 月
Tom A,评论,2013 年 6 月
Mark D,评论,2013 年 12 月
Mark D,评论,2012 年 6 月
Sally M,评论,2011 年 12 月

***

这是 Mike P 的第一篇评论

***

这是 Mike P 的第二次评论

***

这是 Tom A 的第一篇评论

***

等等……

最终,我需要从“评论”中创建一个词袋。我可以在 R 中做到这一点,但我强迫自己学习 Python 进行数据分析,并在我转向的每一个方向上都保持转动。

提前致谢!

【问题讨论】:

  • 也许你可以提供更多关于你的词袋结构的信息?
  • 关于在Python中读取文件this Q&A可以查看。
  • @JohnBarça,使用 readlines() 并没有,我只是想知道是否有更好(或最好)的方法将这些数据导入 Python。我将在“评论”中创建文本的词频矩阵。因此,在表格格式中,将每一行视为一个名称(Mike P、Tom A 等),列是评论中的单词。
  • @utrecht,谢谢!我能够使用lines = text_file.read().split('***') 将每个“评论”加载到列表中的一个元素中。在此之前的所有内容都在 lines[0] 中,解析应该不会太糟糕。
  • 好的,我的立场是正确的。对于非常大的文件,readlines 是个坏主意。

标签: python text-analysis


【解决方案1】:

您可能正在寻找类似Counter collection 的东西,它是一个非常有效的字典,用于计算可散列对象(例如单词)。请参阅How to read large file, line by line in python,了解为什么 readlines 不是处理大文件的好方法,而链接中和下面列出的方法将文件转换为内存效率更高的可迭代文件。您没有指定文件大小,但文本分析通常会处理大文件,因此可能值得一提。

把这两个放在一起,你可以做这样的事情。

from collections import Counter
c=Counter()

with open('Reviews') as f:
    for line in f:
        for word in line.split(" "):
            c[word]+=1

编辑:您可能想要拆分 *** 或其他内容,但这给出了大致的想法。

【讨论】:

    【解决方案2】:

    您可以用它读取整个文件,这是一种非常有效的方法。

    with open('Path/to/file', 'r') as content_file:
        content = content_file.read()
    

    然后您可以根据需要解析内容。

    【讨论】:

    • 感谢您的回复,但我认为这会使我的工作更加困难——这是一次加载一个字符的数据。
    【解决方案3】:

    如果要一次读取大量数据,您可以通过 readline() 手动迭代,然后在转储不必要的条目时对其进行解析。

    【讨论】:

    • 谢谢。我发现人们在 Python 中执行操作的最常见方式是创建一些循环来遍历数据,而对于 R,已经创建了很多函数来为您完成这项工作。这或多或少是准确的?我应该习惯于在 Python 中更多地“手动”学习/做事吗?
    • 没有。 Python 有一些非常有效的做事方式——查看 numpy、scipy、scikit learn、matplotlib 和一堆其他库以获得很好的示例。对于它的价值,当我尝试学习 R 时,我也有同样的感觉——总是有一个开头,为什么这更像是我最喜欢的语言时刻:D。
    【解决方案4】:

    如果您可以发布您正在使用 R 的方式或考虑使用 R 的方式,我怀疑有人可以就如何有效地使用 Python 提供一些建议。例如,您可以创建一个 numpy 字符串数组,并使用 numpy.char 模块中的函数对字符串进行矢量化操作,如果您更喜欢编写列表理解或 for 循环的话。

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多