rxjava : skip / skipLast / skipUntil / skipWhile

rxjavadoc

takeWhile() : 一直take ,直到某个条件进行skip
skipWhile() : 一直skip ,直到某个条件进行take

takeUtil() : 一直take ,直到第二个observable发射才开始skip
skipUtil() : 一直skip ,直到第二个observable发射才开始take


//skip : 忽略前n个item
@Test
public void skip() {
    Disposable disposable = Observable.range(1, 5)
            .skip(3)// 忽略前几个item
            .subscribe(new Consumer<Integer>() {
                @Override
                public void accept(Integer integer) {
                    System.out.println("integer=======" + integer);
                }
            });
}
//integer=======4
//integer=======5



//skipLast : 忽略后n个item
@Test
public void skipLast() {
    Disposable disposable = Observable.just(1, 2, 3, 4, 5)
            .skipLast(3)//忽略后3个item
            .subscribe(new Consumer<Integer>() {
                @Override
                public void accept(Integer integer) {
                    System.out.println("integer=======" + integer);
                }
            });
}
//integer=======1
//integer=======2



//丢弃原始Observable发射的数据,直到第二个Observable发射了一个数据,然后发射原始Observable的剩余数据
//skipUntil里面的Observable发射了之后,原始的Observable每隔一秒循环发射的数据才开始被接收到
public void skipUntil() {
    Observable<Long> observable1 = Observable.interval(1, TimeUnit.SECONDS);
    Observable<String> observable2 = Observable.just("1").delay(3, TimeUnit.SECONDS);
    Disposable disposable = observable1
            .skipUntil(observable2)
            .subscribe(new Consumer<Long>() {
                @Override
                public void accept(@NonNull Long aLong) throws Exception {
                    System.out.println("aLong==============" + aLong);
                }
            });
}
//skip了0 、1 、2
//aLong==============3
//aLong==============4
//aLong==============5
//aLong==============6
//aLong==============7
//aLong==============8
//aLong==============9
//aLong==============10
//.........




//skipWhile : 满足继续忽略,不满足立即进行取值
@Test
public void skipWhile() {
    Disposable disposable = Observable.just(1, 2, 3, 4, 5)
            .skipWhile(new Predicate<Integer>() {
                @Override
                public boolean test(Integer integer) throws Exception {
                    return integer <= 4;
                }
            })
            .subscribe(new Consumer<Integer>() {
                @Override
                public void accept(Integer integer) {
                    System.out.println("integer=======" + integer);
                }
            });
}
//integer=======5
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
显象: Word2Vec 是一种常用的词嵌入(Word Embedding)技术,用于将词语表示为连续向量,以捕捉词语之间的语义关系和相似性。Word2Vec 在自然语言处理中具有广泛的应用场景和需求。例如,在信息检索中,可以使用 Word2Vec 来计算词语的相似性和相关性,以提高搜索结果的质量。在文本分类和情感分析中,可以使用 Word2Vec 来表示词语的语义特征,从而提高分类和情感分析的准确性。 真象: Word2Vec 是由 Google 在 2013 年提出的一种词嵌入技术。它通过将词语映射到一个高维向量空间中,使得具有相似语义的词在空间上距离较近。Word2Vec 采用了两种主要的模型:连续词袋模型(Continuous Bag of Words, CBOW)和跳字模型(Skip-gram)。CBOW 模型根据上下文预测目标词语,而 Skip-gram 模型则根据目标词语预测上下文。 特征: Word2Vec 的结构基于神经网络模型。在 CBOW 模型中,输入是上下文词语的词向量,通过一个隐藏层得到目标词语的词向量表示。而在 Skip-gram 模型中,输入是目标词语的词向量,通过隐藏层预测上下文词语。Word2Vec 使用了层级 softmax 或负采样(Negative Sampling)来进行训练,以提高效率。 举例说明如何实现: 以 Skip-gram 模型为例,假设我们有一个句子 "I love natural language processing.",我们希望将其中的词语表示为向量。首先,我们定义一个上下文窗口大小为 2,然后将句子转化为训练样本: 输入:love 上下文:[I, natural] 输入:natural 上下文:[love, language] 输入:language 上下文:[natural, processing] 然后,我们将词语转化为 one-hot 编码作为输入,并使用神经网络模型训练得到词向量。训练完成后,我们可以使用这些词向量来计算词语之间的相似性、进行聚类或者作为其他任务的输入。 现象: Word2Vec 的功能包括计算词语之间的相似性、进行词语聚类、进行文本分类和情感分析、提供词语的语义特征等。词向量的连续表示使得词语在向量空间上具有语义相似性,从而可以更好地捕捉到词语之间的语义关系。评价 Word2Vec 的指标包括词语相似性计算的准确性、词向量的质量和效果、训练效率等。 变化: Word2Vec 可以与其他文本处理步骤进行组合和流程设计。例如,在信息检索中,可以将词语转化为 Word2Vec 向量表示后,再计算查询词语与文档中词语的相似性,以提高搜索结果的排序质量。此外,还可以使用预训练的 Word2Vec 模型作为初始向量,然后根据特定任务进行微调或进一步训练,以提高效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值