小编pro*_*ian的帖子

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

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

对于这个程序,我正在处理一个已经清理过的大文本文件(比如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
查看次数

从URL导入数据

圣路易斯联邦储备银行在各种网页上提供了大量数据,例如:

http://research.stlouisfed.org/fred2/series/OILPRICE/downloaddata?cid=32217 http://www.federalreserve.gov/releases/h10/summary/default.htm http://research.stlouisfed.org/ fred2 /系列/ DGS20

数据集会更新,有些甚至每天都会更新.我倾向于对每日数据感兴趣(请参阅URLS上的上述设置)

我想将这些价格或费率数据流(可在上述URL中作为CSV或Excel文件访问)直接导入Mathematica.

我已经查看了有关Importing []的文档,但我找不到关于如何进行此类操作的文档(实际上没有).

看起来我需要导航到页面,发送一些数据来选择特定的文件和格式,触发下载,然后从我自己的机器访问下载的数据.如果我可以直接从站点访问数据,那就更好了.

我曾希望Wolfram Alpha可以轻松做到这一点,但我没有取得任何成功.

FinancialData[]对于这类事情来说似乎很自然,但我还是没有看到这样做.财务数据有很多功能,但我没有看到你得到这种东西的方式.

有没有人有这方面的经验或有人指出我正确的方向?

wolfram-mathematica mathematica-8

16
推荐指数
3
解决办法
2591
查看次数

对大量信息机构的案件监控过程[]

我目前正在对大量文本进行操作(在一个文件中大约290MB的纯文本).在将其导入Mathematica 8之后,我现在开始将其分解为小写单词等,因此我可以开始进行文本分析.

问题是这些过程需要很长时间.有没有办法通过Mathematica监控这些操作?对于带变量的操作,我使用了ProgressIndicator等.但这是不同的.我搜索文档和StackOverflow没有发现类似的东西.

在下面,我想监视Cases []命令的过程:

input=Import["/users/USER/alltext.txt"];
wordList=Cases[StringSplit[ToLowerCase[input],Except[WordCharacter]],Except[""]];
Run Code Online (Sandbox Code Playgroud)

monitoring text wolfram-mathematica mathematica-8

13
推荐指数
3
解决办法
260
查看次数

结合Word频率数据列表

这似乎应该是一个显而易见的问题,但列表上的教程和文档不会出现.其中许多问题源于我的文本文件的大小(数百MB)以及我试图将它们归结为我的系统可管理的东西.结果,我正在分段工作,现在正试图将结果结合起来.

我有多个单词频率列表(约40个).列表可以通过Import []获取,也可以作为Mathematica中生成的变量获取.每个列表显示如下,并使用Tally []和Sort []命令生成:

{{"the",42216},{"of",24903},{"和",18624},{"n",16850},{"in",
16164},{"de",14930},{ "a",14660},{"to",14175},{"la",7347},{"was",6030},{"l",5981},{"le",5735},<< 51293 >>,{"abattoir",1},{"abattement",1},{"abattagen",1},{"abattage",1},{"abated",1},{"abandonn",1} ,{"abaiss",1},{"aback",1},{"aase",1},{"aaijaut",1},{"aaaah",1},{"aaa",1}}

以下是第二个文件的示例:

{{"the",30419},{"n",20414},{"de",19956},{"of",16262},{"and",
14488},{"to",12726},{ "a",12635},{"in",11141},{"la",10739},{"et",9016},{"les",8675},{"le",7748},<< 101032 >>,{"abattement",1},{"abattagen",1},{"abattage",1},{"abated",1},{"abandonn",1},{"abaiss",1} ,{"aback",1},{"aase",1},{"aaijaut",1},{"aaaah",1},{"aaa",1}}

我想将它们组合起来,以便频率数据聚合:即如果第二个文件有30,419次出现''并且加入第一个文件,它应该返回有72,635次出现(依此类推,因为我在整个文件中移动)采集).

wolfram-mathematica word-frequency

11
推荐指数
4
解决办法
660
查看次数

在Mathematica中搜索术语出现次数

我正在尝试在Mathematica 8(12k +)中搜索大量文本文件.到目前为止,我已经能够绘制一个单词出现的绝对次数(即"爱"这个单词在这些12k文件中出现5000次).但是,我很难确定"爱"出现一次的文件数量 - 这可能只有1,000个文件,而在其他文件中重复几次.

我发现文档WRT FindList,流,RecordSeparators等有点模糊.有没有办法设置它,以便在文件中找到一个术语的一次发生,然后移动到下一个?

文件列表示例:

{"89001.txt","89002.txt","89003.txt","89004.txt","89005.txt","89006.txt","89007.txt","89008.txt"," 89009.txt","89010.txt","89011.txt","89012.txt","89013.txt","89014.txt","89015.txt","89016.txt","89017. txt","89018.txt","89019.txt","89020.txt","89021.txt","89022.txt","89023.txt","89024.txt"}

以下内容将返回每个文件中包含爱的所有行.有没有办法在进入下一个文件之前只返回每个文件中的第一个爱情?

FindList[filelist, "love"]
Run Code Online (Sandbox Code Playgroud)

非常感谢.这是我的第一篇文章,我主要通过同行/监督帮助,在线教程和文档来学习Mathematica.

search text wolfram-mathematica

6
推荐指数
1
解决办法
173
查看次数

查找和转换HTML文件并移动它们En-Masse

我正在使用Mathematica处理大量的网站文件,我已将其镜像到我自己的系统上.它们分布在数百个目录中,有大量的子目录.例如,我有:

/users/me/test/directory1
/users/me/test/directory1/subdirectory2 [times a hundred]
/users/me/test/directory2
/users/me/test/directory2/subdirectory5 [etc. etc.]
Run Code Online (Sandbox Code Playgroud)

我需要做的是进入每个目录,将Import[]所有HTML文件作为纯文本,然后将它们放在我的系统上以"directory1"命名的其他目录中.到目前为止,通过Do[]循环,我已经能够做一个粗略的版本:然而,我现在最好的情况是将".txt"文件转储到原始目录中,这不是一个理想的解决方案,因为它们仍然是遍布我的系统.

要查找我的文件,我使用 directoryfiles = FileNames["*.htm*", {"*"}, Infinity];

一些额外的烦恼问题:

(1)重复:Mathematica是否有办法处理重复项 - 即如果我们遇到另一个index_en.html,它是否可以重命名为index_en_1.html?

(2)目录:因为所有的目录,除非我用数学来不断地SetDirectoryCreateDirectory一遍又一遍,但继续运行陷入困境.

这一切似乎有点令人困惑.基本上,Mathematica是否有一种有效的方法可以找到分布在数百个目录/子目录中的大量HTML文件,将它们作为纯文本导入,然后将它们导出到其他地方[对我来说知道它们来自directory1非常重要,但就是这样] .

- 为清晰起见编辑 -

这是我目前的代码:

SetDirectory[
  "/users/me/web/"];
dirlist = FileNames[];
directoryPrefix = 
  "/users/me/web/";
plainHTMLBucket = "";
Do[
  directory = directoryPrefix <> dirname;
  exportPrefix = 
   "/users/me/desktop/bucket/";
  SetDirectory[directory];
  allFiles = FileNames["*.htm*", {"*"}, Infinity];
  plainHTMLBucket = "";
  Do[
   plainHTML = Import[filename, "Plaintext"];
   plainHTMLBucket = AppendTo[plainHTMLBucket, plainHTML];
   , {filename, allFiles}];
  Export[exportPrefix <> dirname …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

6
推荐指数
1
解决办法
219
查看次数

从分类的短语列表中提取频率数据

在对列表操作的文档/过去问题进行管道调查后,我发现空白 - 许多案例涉及数字,而我正在处理大量文本.

我有一个常见的三字短语(三字母)的排序列表,它出现在大量的文本信息中,通过Mathematica的Partition [],Tally []和Sort []命令生成.我正在操作的数据类型的一个示例(我有数百个这样的文件):

{{{wa,wa,wa},66},{{i,love,you},62},{{la,la,la},50},{{meaning,of,life},42},{ on,come,on},40},{{come,on,come},40},{{是的,是的,是的},38},{{不,不,不是},36},{{我们, re,gonna},36},{{you,love,me},35},{{in,love,with},32},{{the,way,you},30},{{i,want,and to},30},{{back,to,me},29},<< 38211 >>,{{of,an,xke},1}}

我希望搜索这个文件,这样如果输入是"意义,生命",它将返回"42".我觉得我必须忽略一些明显的东西,但在修补过后我在这里碰了一堵砖墙.Mathematica在其文档中数量很多,这是......好吧,不足为奇.

text wolfram-mathematica

5
推荐指数
3
解决办法
189
查看次数

WGet下载顺序的逻辑

这是一个更普遍的问题,但它对我正在运行的数据挖掘项目有更广泛的影响.我一直在使用wget镜像归档网页进行分析.这是一个大量的数据,我目前的镜像过程已经持续了将近一个星期.这给了我很多时间来观看读数.

wget如何确定下载页面的顺序?我似乎无法辨别其决策制定过程的一致性逻辑(它不按字母顺序,按原始网站创建日期或文件类型进行).当我开始处理数据时,这将非常有助于掌握.

FWIW,这是我正在使用的命令(它需要cookie,而网站的TOS允许以任何方式"访问"我不想冒任何机会) - 其中SITE = URL:

wget -m --cookies=on --keep-session-cookies --load-cookies=cookie3.txt --save-cookies=cookie4.txt --referer=SITE --random-wait --wait=1 --limit-rate=30K --user-agent="Mozilla 4.0" SITE
Run Code Online (Sandbox Code Playgroud)

编辑添加:在对Chown的有用答案的评论中,我稍微改进了我的问题,所以在这里.有更大的网站 - 比如epe.lac-bac.gc.ca/100/205/301/ic/cdc/E/Alphabet.asp - 我发现它最初创建了一个目录结构和一些index.html/default.html页面,然后再回到不同的网站几次(例如,在每次传递时抓取更多的图像和子页面)

bash wget

5
推荐指数
1
解决办法
1715
查看次数

在Bash中删除Unicode行分隔符“ U + 2028”

我有一个带有unicode行分隔符(十六进制代码2028)的文本文件

我想使用bash删除它(我看到了Python的实现,但没有该语言的实现)。我可以使用什么命令来转换文本文件(output4.txt)以丢失Unicode行分隔符?

参见下面的vim: 在此处输入图片说明

bash

5
推荐指数
1
解决办法
1772
查看次数

Web结构可视化中的EdgeLabels

我一直在玩Mathematica的可视化和网络浏览功能.基于一些演示代码,我能够可视化网络.以下是大学网页上的示例:

webcrawler[rooturl_, depth_] :=
  Flatten[Rest[NestList[
       Union[Flatten[Thread[# -> Import[#,"Hyperlinks"]] & /@ Last /@ #]] &, 
       {"" -> rooturl}, depth]]];

Graph[webcrawler[
  "http://www.yorku.ca/", 2], {ImageSize -> Full}]
Run Code Online (Sandbox Code Playgroud)

但是,我一直在努力寻找将EdgeLabels []应用于此Graph[]命令的方法.我想在每一行上写下每个链接,只是为了弄清楚链接簇代表什么.

我已经尝试将生成的Hyperlink连接列表应用到它,这不起作用,也没有任何来自文档/堆栈/ cookbook上其他地方的明显命令.

我想象一个非常杂乱的输出.

visualization wolfram-mathematica mathematica-8

4
推荐指数
2
解决办法
467
查看次数