相关疑难解决方法(0)

有效地使用(和生成)大型文本文件

作为我工作的一部分,我正在处理非常大的文本文件,并在一定程度上分析它们的单词和短语频率.我遇到了计算时间,内存限制和提取相关信息的困难.

对于这个程序,我正在处理一个已经清理过的大文本文件(比如50MB),变成小写.但除此之外它只是非结构化的文本.我试图生成'bigrams','trigrams,'quadgrams'和'fivegrams'的列表 - 分别是经常出现的两个,三个,四个和五个单词短语的组合(即"我是"是一个二重奏,"我是自由的"是一个三元组,"我自由总是"是一个四元组".

我现在在做什么?

这是我当前的代码,其中inputlower是一个全小写字符串(使用Mathematica抓取的Web数据).

inputlower=Import["/directory/allTextLowered.txt"];
bigrams = 
  Sort[Tally[Partition[inputlower, 2, 1]], #1[[2]] > #2[[2]] &];
Export["/directory/bigrams.txt", bigrams];    
Clear[bigrams];
trigrams = 
  Sort[Tally[Partition[inputlower, 3, 1]], #1[[2]] > #2[[2]] &];
Export["/directory/trigrams.txt", trigrams];
Clear[trigrams];    
quadgrams = 
  Sort[Tally[Partition[inputlower, 4, 1]], #1[[2]] > #2[[2]] &];
Export["/directory/quadrams.txt", quadgrams];
Clear[quadgrams];
fivegrams = 
  Sort[Tally[Partition[inputlower, 5, 1]], #1[[2]] > #2[[2]] &];
Export["/directory/fivegrams.txt", fivegrams];
Run Code Online (Sandbox Code Playgroud)

在某种程度上,它运作良好:我确实得到了生成的信息,并且在较小的尺度上,我发现这个代码工作得足够快,我可以得到一些近似于可行Manipulate[]程序的东西.但是,当我们处理大量投入时......

使用大文件时有什么问题?

最重要的是,我的输出文件太大而无法使用.有没有办法在代码中指定一个断点:例如,我不想要任何只出现一次的'bigrams'?如果证明仍然留下太多信息,是否有办法指明我不希望文件中有任何"bigrams",除非它们出现的次数超过10次?即如果"我的奶酪"出现20次,我想知道它,但如果"我垫"只出现一次,也许失去它会使文件更易于管理?

其次,这些过程需要很长时间:单独生成二元输出需要两到三个小时.我是否以有效的方式解决这个问题?

第三,如果我确实有一个包含所有信息的大型bigram文件(~650MB +),Mathematica是否有办法访问信息而不将其全部加载到内存中 - 即获取名为bigrams.txt的文件,了解它包含{{"i","am"},55}没有阻塞系统?

编辑

[截至12月7日,我删除了我提出的示例文件 - 再次感谢所有人]

wolfram-mathematica

19
推荐指数
4
解决办法
3357
查看次数

Mathematica Downvalue Lhs

有没有人知道Mathematica中是否有内置函数来获取低值规则的lhs(没有任何持有)?我知道如何编写代码来实现它,但对于内置代码来说它似乎已经基本了

例如:

a[1]=2;
a[2]=3;
Run Code Online (Sandbox Code Playgroud)

BuiltInIDoNotKnowOf[a] 回报 {1,2}

wolfram-mathematica

10
推荐指数
2
解决办法
2373
查看次数

标签 统计

wolfram-mathematica ×2