opencc4j專案

Why

簡繁互轉需求google查到專案,查到有無套件可直接引用.

採用部分

user不會繁體跟簡體同時使用 判斷字元是否為簡體還是繁體跟中文

    public boolean isTraditional(char c) {
        if(!isChinese(c)) {
            return false;
        }
        return this.tChars.contains(c+"");
    }

    public boolean isSimple(char c) {
        if(!isChinese(c)) {
            return false;
        }
        if(sChars.contains(c+"")) {
            return true;
        }
        return !isTraditional(c);
    }

    public static boolean isChinese(char ch) {
        int unicodeValue = (int) ch;
        return (19968 <= unicodeValue && unicodeValue < 40869);
    }

判斷字串是否為簡繁體

    public boolean isTraditional(String charOrPhrase) {
        if(StringUtils.isEmpty(charOrPhrase)) {
            return false;
        }
        char[] chars = charOrPhrase.toCharArray();
        for(char c : chars) {
            //有一個存在於繁體清單就是繁體
            if(isTraditional(c)) {
                return true;
            }
        }
        return false;
    }

    public boolean isSimple(String charOrPhrase) {
        if(StringUtils.isEmpty(charOrPhrase)) {
            return false;
        }
        char[] chars = charOrPhrase.toCharArray();
        for(char c : chars) {
            //有一個不存在於簡體清單就不是簡體
            if(!isSimple(c)) {
                return false;
            }
        }
        return true;
    }

readme

Features 特点
严格区分「一简对多繁」和「一简对多异」。
完全兼容异体字,可以实现动态替换。
严格审校一简对多繁词条,原则为「能分则不合」。
词库和函数库完全分离,可以自由修改、导入、扩展。
兼容 Windows、Linux、Mac 平台。
支持自定义分词
支持判断单个字(词)是否为简体/繁体
支持返回字符串中简体/繁体的列表信息
支持中国台湾地区繁简体转换

結構部分

main

util

工具類 類似Facade 提供可執行的功能

  • package-info
/**
 * 工具类
 * @author binbin.hou
 * @since 1.0.0
 */

support

model

exception

core

constant

resources

有簡轉繁,繁轉簡的對應資料

  • package-in的

Test部分

每個類別都有寫測試,應該不是TDD

3A原則

3A 原則是一种测试方法,通常用于软件开发中的单元测试。它的步骤如下:

  1. Arrange(准备):设置测试环境,包括创建对象、初始化变量等。
  2. Act(执行):执行被测试的代码或操作。
  3. Assert(断言):验证执行结果是否符合预期。

測試工具

coveralls應用

心得

  1. 簡繁轉換
  2. 發布到maven主網
  3. 中文分詞的想法
  4. travis & coveralls應用

分詞

花瓣結巴分詞

<dependency>
    <groupId>com.huaban</groupId>
    <artifactId>jieba-analysis</artifactId>
    <version>1.0.2</version>
</dependency>

當我們談到「分詞」時,通常有兩個不同的概念:

  1. 英文中的分詞:

    當然可以!除了中文分詞之外,英文文本處理也有許多有趣的例子。以下是一些英文文本處理的常見示例:

  2. 停頓詞移除 (Stopword Removal):

  3. 停頓詞是在英文句子中出現頻率很高但對意義貢獻不大的常見詞語,例如 "the"、"and"、"in" 等。在文本處理中,我們通常會從文本中移除這些停頓詞,以便更好地分析和建模。
  4. 例如,將句子 "The quick brown fox jumps over the lazy dog" 移除停頓詞後,變成 "quick brown fox jumps lazy dog"。

  5. 詞性標記 (Part-of-Speech Tagging):

  6. 詞性標記是將每個詞語標記為其在句子中的詞性(例如名詞、動詞、形容詞等)的過程。這對於語言理解和語法分析非常重要。
  7. 例如,將句子 "She eats an apple" 進行詞性標記,得到 "She (PRON) eats (VERB) an (DET) apple (NOUN)"。

  8. 詞幹提取 (Stemming):

  9. 詞幹提取是將詞語的詞幹提取出來,去除詞語的詞綴,以便將相似的詞歸納為同一個詞幹。
  10. 例如,將 "running"、"runs"、"ran" 提取為 "run"。

  11. 拼寫檢查 (Spell Checking):

  12. 拼寫檢查是自動檢查文本中的拼寫錯誤並提供建議修正的過程。
  13. 例如,將 "recieve" 更正為 "receive"。

  14. 詞向量化 (Word Embedding):

  15. 詞向量化是將詞語映射到連續向量空間的過程,以便計算機能夠理解和處理詞語。
  16. 例如,使用 Word2Vec 或 GloVe 將詞語轉換為向量表示。

這些例子展示了英文文本處理的不同方面,從停頓詞移除到詞向量化。根據您的具體需求,您可以選擇適合的文本處理方法。¹⁴⁵

來源: 與 Bing 的交談, 2024/4/21 (1) NLP Text Preprocessing: Steps, tools, and examples. https://towardsdatascience.com/nlp-text-preprocessing-steps-tools-and-examples-94c91ce5d30. (2) 10 Examples of Natural Language Processing in Action - MonkeyLearn. https://monkeylearn.com/blog/natural-language-processing-examples/. (3) Text Processing: What Is It? - MonkeyLearn. https://monkeylearn.com/blog/text-processing/. (4) Text processing - Wikipedia. https://en.wikipedia.org/wiki/Text_processing. (5) Examples of 'TEXT PROCESSING' in a sentence | Collins English Sentences - Collins Online Dictionary. https://www.collinsdictionary.com/sentences/english/text-processing.

  1. 中文分詞:
    • 在中文中,「分詞」是一種語言學術語,指的是非限定動詞的形式,其功能隨上下文的語境變化。
    • 中文分詞可以具有副詞的功能,也可以作為形容詞。

總之,分詞在不同語言中有不同的定義和用法,但都與動詞變化和句子結構有關。¹²³⁴⁵

來源: 與 Bing 的交談, 2024/4/7

當談到中文分詞時,我們指的是將連續的中文文本切分成詞語或詞組的過程。這在自然語言處理(NLP)中非常重要,因為它是許多中文文本處理任務的第一步。

以下是一些中文分詞的例子:

  1. Jieba 分詞:

    • Jieba 是一個常用的中文分詞工具。讓我們看看一個例子:
    • 原始文本:「2003年沙士一役,港大新發病毒性疾病學講座教授管軼在廣州野味市場的果子狸身上,找到感染人類的沙士冠狀病毒,找到元兇遏止疫情擴散,成為沙士抗疫英雄。」
    • Jieba 分詞結果:「2003 年 沙士 一役, 港大新發 病毒性 疾病 學講座 教授 管軼 在 廣州 野味 市場 的 果子狸 身上, 找到 感染 人類 的 沙士 冠狀 病毒, 找到 元兇 遏止 疫情 擴散, 成為 沙士 抗疫 英雄。」
  2. CKIPtagger 分詞:

    • CKIPtagger 是由台灣中研院開發的中文分詞工具,效果較好並且支持實體識別。
    • 同樣的例子,使用 CKIPtagger 分詞:
    • CKIPtagger 分詞結果:「2003年 沙士 一 役, 港大 新發病毒性 疾病學 講座 教授 管軼 在 廣州 野味 市場 的 果子狸 身上, 找到 感染 人類 的 沙士 冠狀 病毒, 找到 元兇 遏止 疫情 擴散, 成為 沙士 抗疫 英雄。」

從上面的例子中,可以看出 CKIPtagger 在處理長詞語時效果較好,例如將「港大新發病毒性疾病學講座教授」分成合理的詞組。¹

來源: 與 Bing 的交談, 2024/4/7 (1) 最強中文自然語言處理工具CKIPtagger. 中文分詞及實體識別神器 | by LP Cheung - Medium. https://medium.com/@lpcheung/%E6%9C%80%E5%BC%B7%E4%B8%AD%E6%96%87%E8%87%AA%E7%84%B6%E8%AA%9E%E8%A8%80%E8%99%95%E7%90%86%E5%B7%A5%E5%85%B7ckiptagger-b98f0b3bcd. (2) 分詞書寫 - 維基百科,自由的百科全書. https://zh.wikipedia.org/zh-tw/%E5%88%86%E8%A9%9E%E6%9B%B8%E5%AF%AB. (3) 實用基礎文法. http://www.taiwantestcentral.com/Grammar/Title.aspx?ID=59. (4) 「分詞」是什麼?「過去分詞」與「現在分詞」的用法! - 英文庫. https://english.cool/participles/. (5) 中文分詞的難點有哪些? - 知乎. https://www.zhihu.com/question/344176164. (6) undefined. https://github.com/ckiplab/ckiptagger. (7) undefined. https://pypi.org/project/ckiptagger.

當然可以!中文分詞是將連續的字序列按照一定的規範重新組合成詞序列的過程¹。在英文中,單詞之間是以空格作為自然分界符的,但中文只有字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符。因此,中文分詞是一個重要的自然語言處理工序,對模型性能影響至鉅。

舉個例子,我們來比較一下 Jieba 和 CKIPtagger 兩個中文分詞工具的效果。我隨意選擇了三篇文章,分別使用 Jieba 和 CKIPtagger 進行分詞。以下是其中一篇文章的原文:

2003年沙士一役,港大新發病毒性疾病學講座教授管軼在廣州野味市場的果子狸身上,找到感染人類的沙士冠狀病毒,找到元兇遏止疫情擴散,成為沙士抗疫英雄。 事隔17年,他本周二三(21、22日),與團隊到武漢考察,但找不到源頭,「源頭被銷毀得乾乾淨淨,這裏似乎不歡迎專家」,他對內地傳媒說,估計武漢感染規模大沙士十倍起跳,又說政府不作為,無奈做「逃兵」訂機票返港,感到極其無力。

使用 Jieba 分詞的結果如下:

jieba result:
2003 年 沙士 一役 , 港大新發 病毒性 疾病 學講座 教授 管軼 在 廣州 野味 市場 的 果子狸 身上 , 找到 感染 人類 的 沙士 冠狀 病毒 , 找到 元 兇 遏止 疫情 擴散 , 成為 沙士 抗疫 英雄 。 事隔 17 年 , 他 本周 二三 ( 21 、 22 日 ) , 與 團隊 到 武漢 考察 , 但 找 不到 源頭 , 「 源頭 被 銷毀 得 乾 乾淨淨 , 這 裏 似乎 不歡 迎 專家 」 , 他 對 內 地 傳媒 說 , 估計 武漢 感染 規模 大 沙士 十倍 起跳 , 又 說 政府 不作 為 , 無奈 做 「 逃兵 」 訂機票 返港 , 感到 極其 無力 。

使用 CKIPtagger 分詞的結果如下:

ckiptagger result:
2003年 沙士 一 役 , 港大 新發病毒性 疾病學 講座 教授 管軼 在 廣州 野味 市場 的 果子狸 身 上 , 找到 感

來源: 與 Bing 的交談, 2024/4/21 (1) 最強中文自然語言處理工具CKIPtagger. 中文分詞及實體識別神器 | by LP Cheung | Medium. https://medium.com/@lpcheung/%E6%9C%80%E5%BC%B7%E4%B8%AD%E6%96%87%E8%87%AA%E7%84%B6%E8%AA%9E%E8%A8%80%E8%99%95%E7%90%86%E5%B7%A5%E5%85%B7ckiptagger-b98f0b3bcd. (2) 分詞 - 維基百科,自由的百科全書. https://zh.wikipedia.org/zh-tw/%E5%88%86%E8%AF%8D. (3) 實用基礎文法. http://www.taiwantestcentral.com/Grammar/Title.aspx?ID=1611. (4) 中文分詞:基本信息,背景,作用,影響,算法分類,字元匹配,理解法,統計法,技術難點_中文百科全書. https://www.newton.com.tw/wiki/%E4%B8%AD%E6%96%87%E5%88%86%E8%A9%9E. (5) undefined. https://github.com/ckiplab/ckiptagger. (6) undefined. https://pypi.org/project/ckiptagger.

如何發佈到maven中央倉庫

**將項目發布到 Maven 中央倉庫**需要一些步驟,讓我為您提供一個簡要的指南:

  1. Sonatype 相關準備工作:

    • 前往 [Sonatype Issues] 註冊一個帳號,並記住您的帳號和密碼,這在後面的步驟中會用到。
    • 當 Issue 的狀態變為 RESOLVED 或 FIXED 時,即可進行下一步操作。
  2. GPG 相關準備工作:

    • 安裝 GPG 工具:
      • Mac:使用 brew install gpg 安裝。
      • Ubuntu:使用 sudo apt-get install gnupg 安裝。
    • 常用 GPG 命令:
      • 檢查安裝是否成功:gpg --version
      • 生成密鑰對:gpg --gen-key
      • 查看公鑰:gpg --list-keys
      • 將公鑰發布到 PGP 密鑰服務器:gpg --keyserver 服务器地址 --send-keys 公鑰ID
      • 查詢公鑰是否成功發布:gpg --keyserver 服务器地址 --recv-keys 公鑰ID
  3. 配置 Maven:

    • 修改項目的 pom.xml 文件,添加以下內容:

      <licenses>
          <license>
              <name>The Apache Software License, Version 2.0</name>
              <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
          </license>
      </licenses>
      <developers>
          <developer>
              <name>您的名字</name>
              <email>您的電子郵件地址</email>
              <url>您的 GitHub 項目地址</url>
          </developer>
      </developers>
      <scm>
          <url>您的 GitHub 項目地址</url>
          <connection>您的 GitHub 項目 Git URL</connection>
          <developerConnection>您的 GitHub 項目 Git URL</developerConnection>
      </scm>
      <distributionManagement>
          <snapshotRepository>
              <id>ossrh</id>
              <url>https://oss.sonatype.org/content/repositories/snapshots</url>
          </snapshotRepository>
          <repository>
              <id>ossrh</id>
              <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
          </repository>
      </distributionManagement>
      <profiles>
          <profile>
              <id>release</id>
              <build>
                  <plugins>
                      <plugin>
                          <groupId>org.sonatype.plugins</groupId>
                          <artifactId>nexus-staging-maven-plugin</artifactId>
                          <version>1.6.7</version>
                          <extensions>true</extensions>
                          <configuration>
                              <serverId>ossrh</serverId>
                              <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                              <autoReleaseAfterClose>true</autoReleaseAfterClose>
                          </configuration>
                      </plugin>
                      <!-- 其他插件... -->
                  </plugins>
              </build>
          </profile>
      </profiles>
      
    • 替換相關信息,然後執行 mvn clean deploy 命令即可將項目發布到 Maven 中央倉庫。

詳細步驟參考: https://cloud.tencent.com/developer/article/1670611

順序

  1. 原因
  2. 採用部分
  3. 專案額外提供的phase轉換功能
  4. 分詞舉例
  5. 額外觀察到學習部分 發佈到maven中央倉庫