在进行文本文件的处理时,有时需要从已经分组的数据中去除重复的行,当文件较大无法放入内存时会更为麻烦。集算器的分组运算支持丰富的选项,同时支持文件游标读取整组数据,易于实现此类算法,下面通过例子来看一下具体作法。
文件EPRom.log有4列,列之间以tab分隔,数据已按第二列分组。现在要去除数据中重复的行(只保留各组的第一行)。部分源数据如下:
集算器代码:
A1=file("E:\\EPRom.log").import()
这句代码用来将文件读入内存,默认分隔符是tab,默认列名依次是_1,_2,_3……如果文件来自csv文件,则应当指定分隔符,代码形如:import(;”,”)。如果文件的第一行包含列名,则可用选项t读入列名,代码形如import@t()。A1的计算结果如下:
A2=A1.group@1o(_2)
这句代码用来取出A1中各组数据的第1条,分组字段是_2,即第2个字段。A2就是本案例的最终计算结果,如下:
函数group默认情况下可对数据重新分组,比如代码A1.group(_2)会将A1按照第2个字段分为两组,如下:
使用选项@o时,函数group不重新分组,比如代码A1.group@o(_2)的结果如下:
使用选项@1时,函数group会取出各组的第1条,选项@1和@o连用,即可获得本案例的计算目标。
当文件太大无法放入内存时,可以使用集算器游标来解决问题,代码如下:
A1=file("E:\\EPRom.log").cursor()
这句代码以游标的方式打开日志文件。函数cursor表示根据文件对象返回游标对象,默认分隔符是tab,默认列名是_1,_2…_n。值得注意的是,这句代码只是建立游标对象,并没有读入数据,实际的读入动作会在遇到语句for或函数fetch时触发。
B1= file("e:\\result.txt")
这句代码新建文件对象,将来可写入计算结果。
A2:for A1;_2
这句代码对游标A1进行循环读数,每次读入第2列(列名为_2)相同的一组数据,此时数据才会真正读入内存。
注意这里的for 语句。集算器有for cs,n这样的写法,这表示每次读入游标cs中的n条记录。而for cs;x表示每次读入游标cs中的一组记录,每组记录的x字段相同,数据需要按照x事先分组。
语句for cs;x中的x也可以是表达式,即:每次读入多条数据,直到表达式x发生变化,比如:for A1 ; floor(_1/5)。这句代码会对字段_1除5后取整,如果未发生变化,集算器就会把这些记录归为一组。比如第1条到第5条就是同组数据。
B2=file("e:\\result.txt").export@a([A2(1)])
这是for语句A2的循环体,用来对每组数据进行同样的数据处理,具体算法是:取出当前组中的第1条,追加到文件result.txt中。代码中的A2代表循环变量,可以表示当前组对应的所有记录。A2(1)表示A2中的第1条记录。函数export用来将结构化数据写入文件,@a表示追加写。由于A2(1)是单条记录,不是数组,因此要用运算符[]来转换类型。
打开result.txt,可以看到本案例的最终结果:
集算器中for语句的作用范围用缩进就可以表示,而无需用括号或begin/end等标记。比如下面的代码中,B2-B5就是A2的作用范围。
相关推荐
文件"data.csv"可能包含这些文本数据,每一行代表一个文本样本。 3. **数据预处理**: - **清洗**:去除无关字符,如标点符号、数字和特殊字符。 - **分词**:将句子拆分成单词或短语。 - **停用词移除**:"stop...
在文本聚类中,这意味着更新后的质心可能是簇内所有文档特征向量的加权平均。 4. 迭代:重复步骤2和3,直到质心不再显著移动或达到预设的最大迭代次数。这个过程会不断优化簇的结构,使得簇内的文本更加相似,簇间...
在机器学习领域,文本聚类是一种无监督学习方法,用于将相似的文本自动分组到不同的类别中。这里我们关注的是使用Python实现K-Means算法进行文本聚类。K-Means是一种广泛应用的距离-based聚类算法,它通过迭代过程...
- **IOControl.cs**:负责输入输出操作,可能包含读取文本文件、保存聚类结果等功能。 在Java实现KMeans算法时,需要注意以下几点: 1. **距离度量**:在文本数据中,通常使用余弦相似度来衡量两个文档之间的相似...
去掉重复的列名.txt 取n到m条记录.txt 合并字符串.txt 多列的行转列.sql 多行补充.sql 多表对多表进行统计.txt 大小写转换.txt 子查寻和内联查寻.txt 学生名次.txt 嵌套游标的使用.txt 拷贝表格.txt 排序.txt ...
5. **聚类分析**:通过聚类算法(如DBSCAN、K-means等)将相似的网页分组,形成近似重复网页的簇。 6. **重复网页识别**:设定阈值,确定哪些网页属于同一重复组,通常选择相似度最高的一篇作为代表,其余视为重复...
1. **UNION操作符**:当你想要合并多个查询的结果,并去除重复行时,可以使用UNION。例如: ```sql SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2; ``` 上述SQL语句将返回table1...