首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java在spark中查找二元语法(8)

使用java在spark中查找二元语法(8)
EN

Stack Overflow用户
提问于 2016-05-18 19:38:02
回答 2查看 977关注 0票数 1

我已经将句子标记化为单词RDD。所以现在我需要二元组。

例如。This is my test => (This is), (is my), (my test)

为此,我通过搜索找到了.sliding运算符。但是我在我的eclipse上没有得到这个选项(希望它在新版本的spark上可用)

那么,我如何在没有.sliding的情况下实现这一点呢?

添加代码以开始-

代码语言:javascript
复制
public static void biGram (JavaRDD<String> in)
{
    JavaRDD<String> sentence = in.map(s -> s.toLowerCase());
    //get bigram from sentence w/o sliding - CODE HERE
}
EN

回答 2

Stack Overflow用户

发布于 2016-12-27 14:28:26

您可以简单地使用spark中的n元语法转换功能。

代码语言:javascript
复制
public static void biGram (JavaRDD<String> in)
{
    //Converting string into row
    JavaRDD<Row> sentence = sentence.map(s -> RowFactory.create(s.toLowerCase()));

    StructType schema = new StructType(new StructField[] {
            new StructField("sentence", DataTypes.StringType, false, Metadata.empty())  
    });

    //Creating dataframe
    DataFrame dataFrame = sqlContext.createDataFrame(sentence, schema);

    //Tokenizing sentence into words
    RegexTokenizer rt = new RegexTokenizer().setInputCol("sentence").setOutputCol("split")
            .setMinTokenLength(4)
            .setPattern("\\s+");
    DataFrame rtDF = rt.transform(dataFrame);

    //Creating bigrams
    NGram bigram = new NGram().setInputCol(rt.getOutputCol()).setOutputCol("bigram").setN(2);  //Here setN(2) means bigram
    DataFrame bigramDF = bigram.transform(rtDF);


    System.out.println("Result :: "+bigramDF.select("bigram").collectAsList());
}
票数 2
EN

Stack Overflow用户

发布于 2016-05-23 16:08:45

滑动确实是ngram的一种方式。问题是,滑动在迭代器上工作,只需拆分句子并在数组上滑动即可。我正在添加一个Scala代码。

代码语言:javascript
复制
val sentences:RDD[String] = in.map(s => s.toLowerCase())
val biGrams:RDD[Iterator[Array[String]]] = sentences.map(s => s.split(" ").sliding(2))     
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37298476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档