我有一个这样的输入文件:
The Works of Shakespeare, by William Shakespeare
Language: English
我想使用flatMap
和combinations
方法来获得每行的K-V对。
这就是我的工作
var pairs = input.flatMap{line =>
line.split("[\\s*$&#/\"'\\,.:;?!\\[\\(){}<>~\\-_]+")
.filter(_.matches("[A-Za-z]+"))
.combinations(2)
.toSeq
.map{ case array => array(0) -> array(1)}
}
此后我得到了17对,但错过了其中2对:(by,shakespeare)
和(william,shakespeare)
。我认为第一句话的最后一个词可能有问题,但是我不知道如何解决,有人可以告诉我吗?
答案 0 :(得分:0)
combinations
方法将不会给出重复项,即使这些值的顺序相反。因此,您缺少的值已经以其他顺序显示在解决方案中。
此代码将在文本中创建所有有序的单词对。
for {
line <- input
t <- line.split("""\W+""").tails if t.length > 1
a = t.head
b <- t.tail
} yield a -> b
这是tails
方法的说明:
遍历此可遍历集合的尾部。第一个值是该可遍历集合,最后一个值是一个空的可遍历集合,中间的值是tail连续应用的结果。