hankcs / HanLP

中文分词 词性标注 命名实体识别 依存句法分析 成分句法分析 语义依存分析 语义角色标注 指代消解 风格转换 语义相似度 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁转换 自然语言处理
https://hanlp.hankcs.com/
Apache License 2.0
33.48k stars 9.99k forks source link

希望增加tok保存空格的选项,以便分词后还原文本 #1802

Open amalgame21 opened 1 year ago

amalgame21 commented 1 year ago

Describe the feature and the current behavior/state.

文本的空格(全形和半形)会在tok舍弃

Will this change the current api? How?

不知道

Who will benefit with this feature?

使用简繁转换的人

Are you willing to contribute it (Yes/No):

力有不逮

System information

Any other info

我主要是想用hanlp来进行文本简繁转换

因为opencc的简繁转换有时会出现问题(例如的转换) 在其github #224 (comment)的讨论中,看到有人使用HanLP分词再丢给opencc 所以试了一整天,感觉不错 但是因为tok未能保存空格以文本未能成功还原

例子

import hanlp
tok = hanlp.load(hanlp.pretrained.tok.COARSE_ELECTRA_SMALL_ZH)
print(tok(['2021年HanLPv2.1为生产环境带来次世代最先进的多语种Neuro-linguistic programming技术。', '阿婆主来到北京立方庭参观自然语义科技公司。']))

输出为:

[['2021年', 'HanLPv2.1', '为', '生产', '环境', '带来', '次世代', '最', '先进', '的', '多', '语种', 'Neuro-linguistic', 'programming', '技术', '。'], ['阿婆', '主', '来到', '北京立方庭', '参观', '自然语义科技公司', '。']]

Neuro-linguistic programming 两个词中的空格消失了 把这段输出丢给opencc再还原后 就会变成Neuro-linguisticprogramming

因为我编程能力极度有限 现在我只是使用python读取txt档 再像上面那样python的hanlp的tok分词 再使用json.dumps掉进terminal 在terminal用opencc进行简繁转换 再使用jq,sed等工具还原文本

或者有没有什么更有效的分词简繁转换方法? 谢谢!

hankcs commented 1 year ago

Hi,

  1. tok不会舍弃文本的空格(全形和半形)。单词之间的空格不属于单词的一部分,理所当然不会出现在单词中。如果tok认为单词本身含有空格,该空格会作为单词的一部分保留。比如'2021年蝴 蝶图标HanLPv2.1为生产环境带来次世代最先进的多语种Neuro-linguistic programming技术。'会被分作['2021年', '蝴 蝶', '图标', 'HanLPv2.1', '为', '生产', '环境', '带来', '次世代', '最', '先进', '的', '多', '语种', 'Neuro-linguistic', 'programming', '技术', '。']
  2. 你的意思应该是认为'Neuro-linguistic programming'应当分作一个单词,这属于对分词颗粒度看法不同。按照MSR分词标准,英文词组应当被拆开,HanLP的模型很准确。
  3. 从你的目的来讲,HanLP支持输出每个单词在文本中的原始位置,“还原文本”完全可行,几行代码的事情:https://colab.research.google.com/drive/1Q-CV_G-zSErzoT7PlVWzgYj-MNK1BBpf?usp=sharing
wencan commented 6 months ago

这有点尴尬,我自己写代码,比对原文和分割后的列表,实现了 “还原文本”