Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 删除重复项_Scala_Csv_Duplicates - Fatal编程技术网

Scala 删除重复项

Scala 删除重复项,scala,csv,duplicates,Scala,Csv,Duplicates,我想删除CSV文件中数据的重复项。 第一栏是年份,第二栏是句子。我想删除任何重复的句子,无论年份信息如何 是否有可以在val text={}中插入的命令来删除这些重复 我的剧本是: val source = CSVFile("science.csv"); val text = { source ~> Column(2) ~> TokenizeWith(tokenizer

我想删除CSV文件中数据的重复项。 第一栏是年份,第二栏是句子。我想删除任何重复的句子,无论年份信息如何

是否有可以在val text={}中插入的命令来删除这些重复

我的剧本是:

val source = CSVFile("science.csv");

val text = {
source ~>                              
Column(2) ~>                           
TokenizeWith(tokenizer) ~>             
TermCounter() ~>                       
TermMinimumDocumentCountFilter(30) ~>  
TermDynamicStopListFilter(10) ~>      
DocumentMinimumLengthFilter(5)         
} 

谢谢大家!

您需要让代码可复制吗?如果没有,则在excel中,单击“数据”选项卡,单击“1”正上方和“A”左侧的小框以突出显示所有内容,单击“删除重复项”,如果有标题,请确保选中“我的数据有标题”,然后松开包含年份的列,只保留在句子旁边带有复选标记的列。这将删除重复的句子,但保留一年中的第一个实例。

是否需要使代码可复制?如果没有,则在excel中,单击“数据”选项卡,单击“1”正上方和“A”左侧的小框以突出显示所有内容,单击“删除重复项”,如果有标题,请确保选中“我的数据有标题”,然后松开包含年份的列,只保留在句子旁边带有复选标记的列。这将删除重复的句子,但保留一年中的第一个实例。

由于集合自然地消除重复,一种简单的方法是使用只考虑每行文本部分的自定义顺序将行填充到a中

更新 以下是演示上述内容的示例脚本:

import collection.immutable.TreeSet
import scala.io.Source

val lines = Source.fromFile("science.csv").getLines()
val uniques = lines.foldLeft(TreeSet[String]()(Ordering.by(_.split(',')(1)))) {
  (s, l) =>
    if (s contains l) s
    else s + l
}
uniques.toList.sorted foreach println
该脚本根据逗号分隔行的第二部分,将行序列折叠成一个树集,并进行自定义排序。最简单的折叠函数是
(s,l)=>s+l
;但是,这将导致后面年份的行覆盖前面年份相同文本的行。这就是为什么我必须先测试安全壳


现在我们几乎准备好了,我们只需要在打印之前按年份重新排序集合(假设输入是按年份排序的)。

由于集合自然会消除重复项,一种简单的方法是使用只考虑每行文本部分的自定义排序将行填充到中

更新 以下是演示上述内容的示例脚本:

import collection.immutable.TreeSet
import scala.io.Source

val lines = Source.fromFile("science.csv").getLines()
val uniques = lines.foldLeft(TreeSet[String]()(Ordering.by(_.split(',')(1)))) {
  (s, l) =>
    if (s contains l) s
    else s + l
}
uniques.toList.sorted foreach println
该脚本根据逗号分隔行的第二部分,将行序列折叠成一个树集,并进行自定义排序。最简单的折叠函数是
(s,l)=>s+l
;但是,这将导致后面年份的行覆盖前面年份相同文本的行。这就是为什么我必须先测试安全壳


现在我们几乎准备好了,我们只需要在打印之前按年份重新排序集合(假设输入是按年份排序的)。

基本上,您需要一个distinct版本,可以指定使对象(行)唯一的内容(第二列)

给定代码:(修改后的SeqLike.distinct)


本质上,您需要一个distinct版本,在该版本中可以指定使对象(行)唯一的内容(第二列)

给定代码:(修改后的SeqLike.distinct)


如果有重复的,你想保留哪一个?@PéterTörök我想保留第一个(即最早的年份),我肯定遗漏了一些明显的东西:这段代码中定义的所有类都在哪里?(例如,
CSVFile
~>
,…)为什么用nlp或stanford nlp标记问题被认为是不合适的?在我看来,应该明确的是,这个问题涉及斯坦福TMT nlp框架。我在包层次结构中找不到
对象。有人能帮我吗?如果有重复的,你想保留哪一个?@PéterTörök我想保留第一个(即最早的一个),我肯定遗漏了一些明显的东西:这段代码中的所有类都定义在哪里?(例如,
CSVFile
~>
,…)为什么用nlp或stanford nlp标记问题被认为是不合适的?在我看来,应该明确的是,这个问题涉及斯坦福TMT nlp框架。我在包层次结构中找不到
对象。有人能帮我吗?谢谢,那会有用的,但我确实需要代码的可复制性,因为我需要在许多不同的数据集上多次使用它。因此,如果它包含在脚本中会更好:)我明白了。不幸的是,我不认识斯卡拉,所以帮不了什么忙。如果你没有得到一个好的答案,只需在我的评论中发表一条评论,我就可以向你展示如何用Python来实现这一点。谢谢你,这是可行的,但我确实需要让代码具有可复制性,因为我需要在许多不同的数据集上多次使用它。因此,如果它包含在脚本中会更好:)我明白了。不幸的是,我不认识斯卡拉,所以帮不了什么忙。如果您没有得到一个好的答案,只需在我的评论中发布一条评论,我就可以向您展示如何在Python中做到这一点。
distinct(rows, (_._2))