项目依赖疑问
请问为什么该项目依赖Jieba.NET?我看别的语言迁移,似乎没有第三方依赖。
可以提供一个纯净的迁移(只封装OpenCC原项目的API),将Jieba.NET的部分作为单独的Nuget包发行?
请问为什么该项目依赖Jieba.NET?我看别的语言迁移,似乎没有第三方依赖。
可以提供一个纯净的迁移(只封装OpenCC原项目的API),将Jieba.NET的部分作为单独的Nuget包发行?
因为转换需要依赖分词,比如”头发“和”发生“,我这里默认选用了 Jieba.NET 分词。 现在再改纯净包的话,相当于破坏性变更,会导致不知情的用户升级了但没有默认分词实现而出问题。
理解您对版本兼容性的考虑。我心中的理想设计是暴露一个分词的接口,让用户通过接口实现来决定怎么分词(接口由Nuget包OpenCC.NET.ZhSegment.Abstraction提供),从而实现解耦。您可以提供基于Jieba的类作为接口的默认实现,以Nuget包(OpenCC.NET.ZhSegment.Jieba)来提供——
- OpenCC.NET.Core: 封装原版OpenCC的API
- OpenCC.NET.ZhSegment.Abstraction: 提供分词接口
- OpenCC.NET.ZhSegment.Jieba:提供基于jieba的具体实现,依赖OpenCC.NET.ZhSegment.Abstraction包
- OpenCC.NET: 将分词和转换结合的包,依赖OpenCC.NET.Core和OpenCC.NET.ZhSegment.Abstraction包
这样用户既可以直接安装后2个包投入生产,也可以使用最后1个包+自定义接口实现,也可以只基于第1个包自己决定如何翻译。
当然这是我个人的浅见。那么考虑到兼容性,换个思路:现在可否另行提供不依赖分词的纯封装原版OpenCC的Nuget包(上述的OpenCC.NET.Core)呢?
因为转换需要依赖分词,比如”头发“和”发生“
请问C++原版是怎么处理的您有了解吗?我不熟悉C++,我看了其他语言如js和java的实现,似乎都没有包含某个具体的分词依赖?
嗯嗯理解,类似ORM有针对不同数据库的包。这个库是我读书时候写的,很多地方都不成熟,我有时间研究研究你这个方案。
至于原版,我也没有关注过分词实现,我只是参照了它的转换链路。你可以看看 BYVoid/OpenCC | DeepWiki 里是否有提到分词相关内容。
我看了下,原版内置了部分segment的实现。
这个库是我读书时候写的,很多地方都不成熟,我有时间研究研究你这个方案。
感谢开源 😄