我正在尝试编写一个scala函数,从tweets生成n-gram.
该函数将采用两个参数,首先是字符串列表(我们要检查的推文)和一个整数n.如果我们将n设置为2(默认值),那么函数的结果将是2元组的HashMultiset,同样如果我们将其设置为3,那么结果将是3元组的HashMultiset.
有没有办法定义这样的功能?我想明确我的输入,所以我不想只是将函数定义为返回Any的MultiSet.
这是我到目前为止的存根函数,它只适用于n == 2:
def extract_ngrams(tweets:List[String], n:Int=2):HashMultiset[(String,String)] = {
val result = HashMultiset.create[(String,String)]()
result.add(("a", "a"))
result
}
Run Code Online (Sandbox Code Playgroud)
Scala中的元组最多只能达到22个.所以即使有可能它只允许n值为2..22.
我只想返回HashMultiset[Array[String]],你可以用n来定义你的结果:
val result = HashMultiset[Array[String]].create()
然后,您可以根据需要将其映射到元组,具体取决于用例.
更新
如果我理解你需要什么,我会做类似的事情
def extract_ngrams(tweets:List[String], n:Int=2):Map[List[String],Int] = {
tweets.sliding(n).toList.groupBy(_.toList).mapValues(_.length)
}
Run Code Online (Sandbox Code Playgroud)