OpenCC.NET icon indicating copy to clipboard operation
OpenCC.NET copied to clipboard

项目依赖疑问

Open LeaFrock opened this issue 7 months ago • 4 comments

请问为什么该项目依赖Jieba.NET?我看别的语言迁移,似乎没有第三方依赖。

可以提供一个纯净的迁移(只封装OpenCC原项目的API),将Jieba.NET的部分作为单独的Nuget包发行?

LeaFrock avatar May 23 '25 08:05 LeaFrock

请问为什么该项目依赖Jieba.NET?我看别的语言迁移,似乎没有第三方依赖。

可以提供一个纯净的迁移(只封装OpenCC原项目的API),将Jieba.NET的部分作为单独的Nuget包发行?

因为转换需要依赖分词,比如”头发“和”发生“,我这里默认选用了 Jieba.NET 分词。 现在再改纯净包的话,相当于破坏性变更,会导致不知情的用户升级了但没有默认分词实现而出问题。

CosineG avatar May 23 '25 08:05 CosineG

理解您对版本兼容性的考虑。我心中的理想设计是暴露一个分词的接口,让用户通过接口实现来决定怎么分词(接口由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的实现,似乎都没有包含某个具体的分词依赖?

LeaFrock avatar May 23 '25 09:05 LeaFrock

嗯嗯理解,类似ORM有针对不同数据库的包。这个库是我读书时候写的,很多地方都不成熟,我有时间研究研究你这个方案。

至于原版,我也没有关注过分词实现,我只是参照了它的转换链路。你可以看看 BYVoid/OpenCC | DeepWiki 里是否有提到分词相关内容。

CosineG avatar May 23 '25 10:05 CosineG

我看了下,原版内置了部分segment的实现。

这个库是我读书时候写的,很多地方都不成熟,我有时间研究研究你这个方案。

感谢开源 😄

LeaFrock avatar May 26 '25 08:05 LeaFrock