Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

删除stopwords.txt文件内容后重启,自带停用词任然生效 #1253

Closed
1 task done
achenjie opened this issue Jul 26, 2019 · 6 comments
Closed
1 task done

Comments

@achenjie
Copy link

achenjie commented Jul 26, 2019

注意事项

请确认下列注意事项:

  • 我已仔细阅读下列文档,都没有找到答案:
  • 我已经通过Googleissue区检索功能搜索了我的问题,也没有找到答案。
  • 我明白开源社区是出于兴趣爱好聚集起来的自由社区,不承担任何责任或义务。我会礼貌发言,向每一个帮助我的人表示感谢。
  • 我在此括号内输入x打钩,代表上述事项确认完毕

版本号

当前最新版本号是:1.7.4
我使用的版本是:1.7.4

我的问题

在data/dictionary目录下,删除stopwords.txt.bin文件,并将stopwords.txt文件删除为空,重启后,重新运行程序,发现原停用词表中的停用词任然生效,即删除无效。

复现问题

步骤

  1. 首先……
  2. 然后……
  3. 接着……

触发代码

text = '员工怎么办理工作证?'
NotionalTokenizer = JClass("com.hankcs.hanlp.tokenizer.NotionalTokenizer")
print(NotionalTokenizer.segment(text)) 

输出结果:
[员工/n, 办理/v, 工作证/n]

接着在data/dictionary目录下,删除stopwords.txt.bin文件,并将stopwords.txt文件删除为空,并在stopwords.txt中添加停用词“员工”,重启后,重新运行程序

text = '员工怎么办理工作证?'
NotionalTokenizer = JClass("com.hankcs.hanlp.tokenizer.NotionalTokenizer")
print(NotionalTokenizer.segment(text)) 

输出结果:
[办理/v, 工作证/n]

自己添加的停用词能生效,但是hanlp自带的停用词任然生效,删除不起作用。

期望输出

期望输出结果:
[怎么/r, 办理/v, 工作证/n]

实际输出

[办理/v, 工作证/n]

其他信息

@hankcs
Copy link
Owner

hankcs commented Jul 26, 2019

NotionalTokenizer会过滤r词性,你可以写个lambda函数自己过滤。

@achenjie
Copy link
Author

谢谢,但我是引用doc2vec进行文本相似度计算,里面内置了NotionalTokenizer分词器,我想问,如何在python中引用doc2vec时,修改NotionalTokenizer分词器为其他分词器

@hankcs hankcs closed this as completed in c4725b8 Jul 27, 2019
@hankcs
Copy link
Owner

hankcs commented Jul 27, 2019

感谢反馈,已经修复,请参考上面的commit。
如果还有问题,欢迎重开issue。

新增了com.hankcs.hanlp.mining.word2vec.DocVectorModel#enableFilter,你可以使用如下补丁。

hanlp-1.7.4.jar.zip

@achenjie
Copy link
Author

非常感谢,用了您这边提供的补丁,有以下两个问题:
1、分词器只能选择基类要是seg.segment的吗?我选择最短路径分词就可以进行语义查询,但是选择NLPTokenizer 就会提示报错,
com.hankcs.hanlp.mining.word2vec.DocVectorModel(com.hankcs.hanlp.mining.word2vec.WordVectorModel,com.hankcs.hanlp.seg.Segment,boolean);
2、我的目的是删除hanlp里面自带的停用词,使自带的停用词在我的程序中不生效,然后添加自己的停用词,但是最后的测试结果是,自带的停用词删除无效,不管是用那个分词器,然后使用CoreStopWordDictionary.apply(term_list)进行删除停用词时,自带的停用词后还是会起作用。

@hankcs
Copy link
Owner

hankcs commented Jul 28, 2019

  1. 基类必须是Segment,NLPTokenizer不是Segment类
  2. Java可以通过替换Filter来实现,你可以编译一个Java类放到static目录中。

@achenjie
Copy link
Author

非常感谢作者的耐心解答,问题已解决。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants