我无法在spark scala中找到对此的回应,
请查看详细信息,
我有一个输出文本,其中包含主题列表,其重量如下:(这是使用文档上的lda实现的)
TOPIC_0;connection;0.030922248292319265
TOPIC_0;pragmatic;0.02690878152282403
TOPIC_0;Originator;0.02443295327258558
TOPIC_0;check;0.022290036662386385
TOPIC_0;input;0.020578378303486064
TOPIC_0;character;0.019718375317755072
TOPIC_0;wide;0.017389396600966833
TOPIC_0;load;0.016898979702795396
TOPIC_0;Pretty;0.014923624938546124
TOPIC_0;soon;0.014731449663492822
我想浏览每个主题,并在文件中找到与此主题相关的第一句话。
我试过这样的事情,但我无法想到这个过滤:
topic.foreach { case (term, weight) =>
val filePath = "data/20_news/sci.BusinessandFinance/14147"
val lines = sc.textFile(filePath)
val words = lines.flatMap(x => x.split(' '))
val sentence = words.filter(w => words.contains(term))
}
过滤的最后一行不正确,
例如:
我的文字文件是这样的:
input for the program should be checked. the connection between two part is pretty simple.
所以它应该提取主题的第一句话:“input
”
感谢任何帮助或想法
答案 0 :(得分:1)
我认为你正在过滤你的单词列表,你应该在线上过滤。
此代码:words.contains(term)
并不真正有意义,因为如果该字词出现在任何字词中,则返回true。
写这样的东西会更有意义:
w.contains(term)
因此,至少您的过滤器只返回与该术语匹配的单词。
然而,你真正想要的是看line
(即句子)是否包含该词。
topic.foreach { case (term, weight) =>
val filePath = "data/20_news/sci.BusinessandFinance/14147"
val lines = sc.textFile(filePath)
val sentence = lines.filter(line => line.contains(term))
}
虽然这些线可能需要额外的分裂(例如在完全停止时)以获得句子。 您可以像这样添加此步骤:
topic.foreach { case (term, weight) =>
val filePath = "data/20_news/sci.BusinessandFinance/14147"
val lines = sc.textFile(filePath)
val morelines = lines.flatMap(l => l.split(". "))
val sentence = morelines.filter(line => line.contains(term))
}
答案 1 :(得分:0)
val rddOnline = sc.textFile(“ / path / to / file”)
val hasLine = rddOnline.map(line => line.contains(“无论它是什么”))
它将返回true或false