我需要读取一个空间分隔的大文本文件,并计算文件中每个代码的实例数.从本质上讲,这些是运行一些实验数十万次的结果.系统会吐出一个看起来像这样的文本文件:
A7PS A8PN A6PP23 ...
Run Code Online (Sandbox Code Playgroud)
实际上有数十万个这样的条目,我需要计算每个代码的出现次数.
我想我可以打开一个StreamReader并逐行浏览,拆分空格字符.查看是否已遇到代码并将该代码的计数加1.但是,考虑到数据的大小,这可能很幼稚.
有人知道处理这种处理的有效算法吗?
更新:
好的,所以共识似乎是我的方法是沿着正确的方向
我有兴趣听到的是 - 更有效的 - StreamReader.TextReader,BinaryReader
存储结果字典的最佳结构是什么?HashTable,SortedList,HybridDictionary
如果文件中没有换行符(我还没有给出样本),那么将整个空间分割成效率是不是很低?
从本质上讲,我期待尽可能提高性能
再次感谢
我试图弄清楚如何将这种格式的字符串解析成一个像任意深度的数据结构的树.
"{{Hello big|Hi|Hey} {world|earth}|{Goodbye|farewell} {planet|rock|globe{.|!}}}"
[[["Hello big" "Hi" "Hey"]
["world" "earth"]]
[["Goodbye" "farewell"]
["planet" "rock" "globe" ["."
"!"]]]]
Run Code Online (Sandbox Code Playgroud)
我已经试过了一些正则表达式玩这个(如#"{([^ {}]*)}"),但我什么都尝试过,似乎"扁平化"树到列表的大名单.我可能从错误的角度接近这个,或者正则表达式不适合这项工作.
谢谢你的帮助!
我正在逐行处理一些文本文件BufferReader.readlLine().
两个文件具有相同的大小130MB,但一个需要40秒才能处理,而其他文件需要75秒.
我注意到一个文件有180万行,而其他文件有210万行.但是,当我尝试处理具有相同大小的300万行的文件时,需要30分钟来处理.
所以我的问题是:
这种行为是因为寻求缓冲区读取器的时间(我想知道如何BufferedReader逐行工作或解析文件?)
有没有什么方法可以更快地逐行读取文件?
好的朋友,我提供更多细节.
我正在使用正则表达式将该行拆分为三个部分,然后使用SimpleUnsortedWriter(由Cassandra提供)我将其作为键,列和值写入某个文件.处理完16MB数据后,它会刷新到磁盘.
但是处理逻辑对于所有文件都是相同的,甚至一个大小为330MB的文件,但是在30秒内没有大约100万行的处理逻辑.可能是什么原因?
deviceWriter = new SSTableSimpleUnsortedWriter(
directory,
keyspace,
"Devices",
UTF8Type.instance,
null,
16);
Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)
{
//split the line i n row column and value
long timestamp = System.currentTimeMillis() * 1000;
deviceWriter .newRow(bytes(rowKey));
deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);
}
Run Code Online (Sandbox Code Playgroud)
已经改变了,-Xmx256M to -Xmx 1024M但无论如何都没有帮助.
更新: 根据我的观察,当我写入缓冲区(在物理内存中)时,就像没有.写入缓冲区正在增加新的写入需要时间.(这是我的猜测)
请回复.
我有一个包含这样的数据的文本文件:
This is just text
-------------------------------
Username: SOMETHI C: [Text]
Account: DFAG Finish time: 1-JAN-2011 00:31:58.91
Process ID: 2028aaB Start time: 31-DEC-2010 20:27:15.30
This is just text
-------------------------------
Username: SOMEGG C: [Text]
Account: DFAG Finish time: 1-JAN-2011 00:31:58.91
Process ID: 20dd33DB Start time: 12-DEC-2010 20:27:15.30
This is just text
-------------------------------
Username: SOMEYY C: [Text]
Account: DFAG Finish time: 1-JAN-2011 00:31:58.91
Process ID: 202223DB Start time: 15-DEC-2010 20:27:15.30
Run Code Online (Sandbox Code Playgroud)
有没有办法从这种数据中提取用户名,完成时间,开始时间?我正在寻找一些起点使用R或Powershell.
基本上我从ls -la命令得到行:
-rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file
Run Code Online (Sandbox Code Playgroud)
并希望获得文件大小(442).我尝试过cut并sed命令,但是没有成功.使用基本的UNIX工具(cut,sed,awk ...),如何从stdin获取特定列,其中delimiter是/ +/regexp?
我有数百个文本文件,每个文件中包含以下信息:
*****Auto-Corelation Results******
1 .09 -.19 .18 non-Significant
*****STATISTICS FOR MANN-KENDELL TEST******
S= 609
VAR(S)= 162409.70
Z= 1.51
Random : No trend at 95%
*****SENs STATISTICS ******
SEN SLOPE = .24
Run Code Online (Sandbox Code Playgroud)
现在,我想读取所有这些文件,并从每个文件(例如)中"收集" Sen的统计信息,.24并将其与相应的文件名一起编译成一个文件.我必须在R里做.
我使用过CSV文件,但不知道如何使用文本文件.
这是我现在使用的代码:
require(gtools)
GG <- grep("*.txt", list.files(), value = TRUE)
GG<-mixedsort(GG)
S <- sapply(seq(GG), function(i){
X <- readLines(GG[i])
grep("SEN SLOPE", X, value = TRUE)
})
spl <- unlist(strsplit(S, ".*[^.0-9]"))
SenStat <- as.numeric(spl[nzchar(spl)])
SenStat<-data.frame( SenStat,file = GG)
write.table(SenStat, "sen.csv",sep = ", ",row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)
当前代码无法正确读取所有值并给出此错误: …
我在数据帧中有这么大的语料库数据
res(数据帧)
text.1
1 <NA>
2 beren stuart vanuatu monday october venkatesh ramesh sandeep talanki nagaraj subject approve qlikview gpa access process form gpa access email requestor line manager access granted raj add user qlikview workgroup gpa access form requestors lim tek kon vanuatu address lini high port vila efate title relationship manager emerging corporates employee id lan id limtk bsbcc authorising manager beren stuart vanuatu read gpa dashboard business technical reason na
text.2
1 <NA>
2 kumar santhosh behalf …Run Code Online (Sandbox Code Playgroud) 我有这个简单的输入
I have {red;green;orange} fruit and cup of {tea;coffee;juice}
Run Code Online (Sandbox Code Playgroud)
我使用Perl两个外部支架之间的分隔符标识模式{和},和随机内部与内部分隔符的字段;.
我得到了这个输出
I have green fruit and cup of coffee
Run Code Online (Sandbox Code Playgroud)
这是我工作的Perl脚本
perl -plE 's!\{(.*?)\}!@x=split/;/,$1;$x[rand@x]!ge' <<< 'I have {red;green;orange} fruit and cup of {tea;coffee;juice}'
Run Code Online (Sandbox Code Playgroud)
我的任务是处理这种输入格式
I have { {red;green;orange} fruit ; cup of {tea;coffee;juice} } and {nice;fresh} {sandwich;burger}.
Run Code Online (Sandbox Code Playgroud)
据我所知,脚本应跳过{ ... }第一个文本部分中的外部闭括号,其中包含开括号和右括号的文本:
{ {red;green;orange} fruit ; cup of {tea;coffee;juice} }
Run Code Online (Sandbox Code Playgroud)
它应该选择一个随机的部分,像这样
{red;green;orange} fruit
Run Code Online (Sandbox Code Playgroud)
要么
cup of {tea;coffee;juice}
Run Code Online (Sandbox Code Playgroud)
然后它更深入:
green fruit
Run Code Online (Sandbox Code Playgroud)
处理完所有文本后,结果可能是以下任何一种
I have red fruit …Run Code Online (Sandbox Code Playgroud) 我对正则表达式的速度有很好的体验JS.
我决定做一个小比较.我运行了以下代码:
var str = "A regular expression is a pattern that the regular expression engine attempts to match in input text.";
var re = new RegExp("t", "g");
console.time();
for(var i = 0; i < 10e6; i++)
str.replace(re, "1");
console.timeEnd();
Run Code Online (Sandbox Code Playgroud)
结果:3888.731ms.
现在C#:
var stopwatch = new Stopwatch();
var str = "A regular expression is a pattern that the regular expression engine attempts to match in input text.";
var re = new Regex("t", RegexOptions.Compiled);
stopwatch.Start(); …Run Code Online (Sandbox Code Playgroud) 我正在创建一个DocumentTermMatrix使用create_matrix()来RTextTools创建container并model基于它.它适用于极大的数据集.
我为每个类别(因子级别)执行此操作.因此,对于每个类别,它必须运行矩阵,容器和模型.当我运行下面的代码(例如16核/ 64 GB)时 - 它只在一个核心中运行,并且使用的内存小于10%.
有没有办法加快这个过程?也许用doparallel&foreach?任何信息肯定会有所帮助.
#import the required libraries
library("RTextTools")
library("hash")
library(tm)
for ( n in 1:length(folderaddress)){
#Initialize the variables
traindata = list()
matrix = list()
container = list()
models = list()
trainingdata = list()
results = list()
classifiermodeldiv = 0.80`
#Create the directory to place the models and the output files
pradd = paste(combinedmodelsaveaddress[n],"SelftestClassifierModels",sep="")
if (!file.exists(pradd)){
dir.create(file.path(pradd))
}
Data$CATEGORY <- as.factor(Data$CATEGORY)
#Read the …Run Code Online (Sandbox Code Playgroud) text-processing ×10
r ×4
c# ×2
parsing ×2
text-parsing ×2
.net ×1
algorithm ×1
bash ×1
clojure ×1
doparallel ×1
foreach ×1
java ×1
javascript ×1
nested-lists ×1
perl ×1
powershell ×1
readline ×1
regex ×1
seek ×1
shell ×1
text ×1
text-files ×1
tree ×1
unix ×1