标签: text-processing

在C#中高效解析大型文本文件

我需要读取一个空间分隔的大文本文件,并计算文件中每个代码的实例数.从本质上讲,这些是运行一些实验数十万次的结果.系统会吐出一个看起来像这样的文本文件:

A7PS A8PN A6PP23 ...
Run Code Online (Sandbox Code Playgroud)

实际上有数十万个这样的条目,我需要计算每个代码的出现次数.

我想我可以打开一个StreamReader并逐行浏览,拆分空格字符.查看是否已遇到代码并将该代码的计数加1.但是,考虑到数据的大小,这可能很幼稚.

有人知道处理这种处理的有效算法吗?

更新:

好的,所以共识似乎是我的方法是沿着正确的方向

我有兴趣听到的是 - 更有效的 - StreamReader.TextReader,BinaryReader

存储结果字典的最佳结构是什么?HashTable,SortedList,HybridDictionary

如果文件中没有换行符(我还没有给出样本),那么将整个空间分割成效率是不是很低?

从本质上讲,我期待尽可能提高性能

再次感谢

c# algorithm parsing text-processing

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

将字符串解析为树结构?

我试图弄清楚如何将这种格式的字符串解析成一个像任意深度的数据结构的树.

"{{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)

我已经试过了一些正则表达式玩这个(如#"{([^ {}]*)}"),但我什么都尝试过,似乎"扁平化"树到列表的大名单.我可能从错误的角度接近这个,或者正则表达式不适合这项工作.

谢谢你的帮助!

tree parsing text-processing clojure text-parsing

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

BufferedReader的低性能

我正在逐行处理一些文本文件BufferReader.readlLine().

两个文件具有相同的大小130MB,但一个需要40秒才能处理,而其他文件需要75秒.

我注意到一个文件有180万行,而其他文件有210万行.但是,当我尝试处理具有相同大小的300万行的文件时,需要30分钟来处理.

所以我的问题是:

  1. 这种行为是因为寻求缓冲区读取器的时间(我想知道如何BufferedReader逐行工作或解析文件?)

  2. 有没有什么方法可以更快地逐行读取文件?

好的朋友,我提供更多细节.

我正在使用正则表达式将该行拆分为三个部分,然后使用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但无论如何都没有帮助.

更新: 根据我的观察,当我写入缓冲区(在物理内存中)时,就像没有.写入缓冲区正在增加新的写入需要时间.(这是我的猜测)

请回复.

java text-processing readline seek bufferedreader

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

如何使用R或PowerShell从文本文件中提取数据?

我有一个包含这样的数据的文本文件:

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.

powershell text-processing r powershell-2.0

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

如何使用regexp分隔符获取第n列

基本上我从ls -la命令得到行:

-rw-r--r--  13 ondrejodchazel  staff  442 Dec 10 16:23 some_file
Run Code Online (Sandbox Code Playgroud)

并希望获得文件大小(442).我尝试过cutsed命令,但是没有成功.使用基本的UNIX工具(cut,sed,awk ...),如何从stdin获取特定列,其中delimiter是/ +/regexp?

unix bash text text-processing

6
推荐指数
2
解决办法
8993
查看次数

如何从文本文件中读取信息?

我有数百个文本文件,每个文件中包含以下信息:

*****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)

当前代码无法正确读取所有值并给出此错误: …

text-processing r logfile-analysis text-files

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

计算单词列表中的单词频率

我在数据帧中有这么大的语料库数据

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)

text-processing r nested-lists word-frequency

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

在分隔符之间随机化文本

我有这个简单的输入

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)

shell perl text-processing text-parsing

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

C#Regex性能纯相对JS

我对正则表达式的速度有很好的体验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)

.net javascript c# regex text-processing

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

Create_Matrix'RTextTools'包的并行计算

我正在创建一个DocumentTermMatrix使用create_matrix()RTextTools创建containermodel基于它.它适用于极大的数据集.

我为每个类别(因子级别)执行此操作.因此,对于每个类别,它必须运行矩阵,容器和模型.当我运行下面的代码(例如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)

parallel-processing foreach text-processing r doparallel

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