Ниже код пытается подсчитать количество раз, когда «Яблоко» появляется в файле HTML.Подсчет числа слов в файле
object Question extends App {
def validWords(fileSentancesPart: List[String], wordList: List[String]): List[Option[String]] =
fileSentancesPart.map(sentancePart => {
if (isWordContained(wordList, sentancePart)) {
Some(sentancePart)
} else {
None
}
})
def isWordContained(wordList: List[String], sentancePart: String): Boolean = {
for (word <- wordList) {
if (sentancePart.contains(word)) {
return true;
}
}
false
}
lazy val lines = scala.io.Source.fromFile("c:\\data\\myfile.txt" , "latin1").getLines.toList.map(m => m.toUpperCase.split(" ")).flatten
val vw = validWords(lines, List("APPLE")) .flatten.size
println("size is "+vw)
}
Число 79 в соответствии с кодом Scala. Но когда я открываю файл текстовым редактором, он находит 81 слово с «Apple». Поиск не зависит от регистра. Может определить, где ошибка? (Я предполагаю, что ошибка с моим кодом и не текстовый редактор!)
Я написал пару тестов, но код кажется, ведут себя, как ожидается, в этих простых случаях использования:
import scala.collection.mutable.Stack;
import org.scalatest.FlatSpec;
import org.scalatest._;
class ConvertTes extends FlatSpec {
"Valid words" should "be returned" in {
val fileWords = List("this" , "is" , "apple" , "applehere")
val validWords = List("apple")
lazy val lines = scala.io.Source.fromFile("c:\\data\\myfile.txt" , "latin1").getLines.toList.map(m => m.toUpperCase.split(" ")).flatten
val l : List[String] = validWords(fileWords, validWords).flatten
l.foreach(println)
}
"Entire line " should "be returned for matched word" in {
val fileWords = List("this" , "is" , "this apple is an" , "applehere")
val validWords = List("apple")
val l : List[String] = validWords(fileWords, validWords).flatten
l.foreach(println)
}
}
файл HTML разбираемый (упоминаемый как "C: \ Data \ myfile.txt") в коде выше:
https://drive.google.com/file/d/0B1TIppVWd0LSVG9Edl9OYzh4Q1U/view?usp=sharing
Любые предложения по альтернативам код выше прием.
Подумайте, что моя проблема соответствует @Jack Leow comment. Для кода:
val fileWords = List("this", "is", "this appleisapple an", "applehere")
val validWords = List("apple")
val l: List[String] = validWords(fileWords, validWords).flatten
println("size : " + l.size)
размер Печатаемая 2, когда оно должно быть 3
Просто просматривайте код очень быстро, если в одной строке файла содержится слово «APPLE» дважды, ho w что подсчитано? –
@JackLeow Я думаю, что это действительно моя проблема, см. Обновление –
"(? I) apple" .r findAllIn "this appleisApple a" size –