1. 程式人生 > >漢語言處理工具pyhanlp的拼音轉換與字元正則化

漢語言處理工具pyhanlp的拼音轉換與字元正則化

開發十年,就只剩下這套架構體系了! >>>   

漢字轉拼音

HanLP中的漢字轉拼音功能也十分的強大。

說明

  1. HanLP不僅支援基礎的漢字轉拼音,還支援聲母、韻母、音調、音標和輸入法首字母首聲母功能。
  2. HanLP能夠識別多音字,也能給繁體中文注拼音。
  3. 最重要的是,HanLP採用的模式匹配升級到AhoCorasickDoubleArrayTrie,效能大幅提升,能夠提供毫秒級的響應速度!

演算法詳解

  1. 《漢字轉拼音與簡繁轉換的Java實現》
  1. # 漢字轉拼音
  2. Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
  3. text = "過載不是重任!"
  4. pinyin_list = HanLP.convertToPinyinList(text)

 

  1. print("原文,", end=" ")
  2. print(text)
  3. print("拼音(數字音調),", end=" ")
  4. print(pinyin_list)
  5. print("拼音(符號音調),", end=" ")
  6. for pinyin in pinyin_list:
  7. print("%s," % pinyin.getPinyinWithToneMark(), end=" ")
  8. print("\n拼音(無音調),", end=" ")
  9. for pinyin in pinyin_list:
  10. print("%s," % pinyin.getPinyinWithoutTone(), end=" ")
  11. print("\n聲調,", end=" ")
  12. for pinyin in pinyin_list:
  13. print("%s," % pinyin.getTone(), end=" ")
  14. print("\n聲母,", end=" ")
  15. for pinyin in pinyin_list:
  16. print("%s," % pinyin.getShengmu(), end=" ")
  17. print("\n韻母,", end=" ")
  18. for pinyin in pinyin_list:
  19. print("%s," % pinyin.getYunmu(), end=" ")
  20. print("\n輸入法頭,", end=" ")
  21. for pinyin in pinyin_list:
  22. print("%s," % pinyin.getHead(), end=" ")

 

  1. print()
  2. # 拼音轉換可選保留無拼音的原字元
  3. print(HanLP.convertToPinyinString("截至2012年,", " ", True))
  4. print(HanLP.convertToPinyinString("截至2012年,", " ", False))

 

1.原文, 過載不是重任!

2.拼音(數字音調), [chong2, zai3, bu2, shi4, zhong4, ren4, none5]

3.拼音(符號音調), chóng, zǎi, bú, shì, zhòng, rèn, none,

4.拼音(無音調), chong, zai, bu, shi, zhong, ren, none,

5.聲調, 2, 3, 2, 4, 4, 4, 5,

6.聲母, ch, z, b, sh, zh, r, none,

7.韻母, ong, ai, u, i, ong, en, none,

8.輸入法頭, ch, z, b, sh, zh, r, none,

9.jie zhi none none none none nian none

10.jie zhi 2 0 1 2 nian ,

拼音轉中文

HanLP中的資料結構和介面是靈活的,組合這些介面,可以自己創造新功能,我們可以使用AhoCorasickDoubleArrayTrie實現的最長分詞器,需要使用者呼叫setTrie()提供一個AhoCorasickDoubleArrayTrie

 

1.StringDictionary = JClass(

2."com.hankcs.hanlp.corpus.dictionary.StringDictionary")

3.CommonAhoCorasickDoubleArrayTrieSegment = JClass(

4."com.hankcs.hanlp.seg.Other.CommonAhoCorasickDoubleArrayTrieSegment")

5.Config = JClass("com.hankcs.hanlp.HanLP$Config")

6.

7.TreeMap = JClass("java.util.TreeMap")

8.TreeSet = JClass("java.util.TreeSet")

9.

10.dictionary = StringDictionary()

11.dictionary.load(Config.PinyinDictionaryPath)

12.entry = {}

13.m_map = TreeMap()

14.for entry in dictionary.entrySet():

15.pinyins = entry.getValue().replace("[\\d,]", "")

16.words = m_map.get(pinyins)

17.if words is None:

18.words = TreeSet()

19.m_map.put(pinyins, words)

20.words.add(entry.getKey())

21.words = TreeSet()

22.words.add("綠色")

23.words.add("濾色")

24.m_map.put("lvse", words)

25.

26.segment = CommonAhoCorasickDoubleArrayTrieSegment(m_map)

27.print(segment.segment("renmenrenweiyalujiangbujianlvse"))

28.print(segment.segment("lvsehaihaodajiadongxidayinji"))

 

1.[renmenrenweiyalujiangbujian/null, lvse/[濾色, 綠色]]

2.[lvse/[濾色, 綠色], haihaodajiadongxidayinji/null]

 

字元正則化

演示正規化字元配置項的效果(繁體->簡體,全形->半形,大寫->小寫)。

該配置項位於hanlp.properties中,通過Normalization=true來開啟(現在直接通過HanLP.Config.Normalization開啟即可)。

 

切換配置後必須刪除CustomDictionary.txt.bin快取,否則隻影響動態插入的新詞。

在我動筆前一個星期,已經有同學添加了,新增自定義詞典之後,自動刪除快取的功能。地址請參閱github.com/hankcs/HanLP/pull/954,現在只需要開啟正則化即可

 

1.CustomDictionary =JClass("com.hankcs.hanlp.dictionary.CustomDictionary")

2.print("HanLP.Config.Normalization = False\n")

3.HanLP.Config.Normalization = False

4.CustomDictionary.insert("愛聽4G", "nz 1000")

5.print(HanLP.segment("愛聽4g"))

6.print(HanLP.segment("愛聽4G"))

7.print(HanLP.segment("愛聽4G"))

8.print(HanLP.segment("愛聽4G"))

9.print(HanLP.segment("愛聽4G"))

10.

11.print(HanLP.segment("喜歡4G"))

12.print(HanLP.segment("hankcs在臺灣寫程式碼"))

 

13.

14.print("\nHanLP.Config.Normalization = True\n")

15.HanLP.Config.Normalization = True

16.print(HanLP.segment("愛聽4g"))

17.print(HanLP.segment("愛聽4G"))

18.print(HanLP.segment("愛聽4G"))

19.print(HanLP.segment("愛聽4G"))

20.print(HanLP.segment("愛聽4G"))

21.

22.print(HanLP.segment("喜歡4G"))

23.print(HanLP.segment("hankcs在臺灣寫程式碼"))

24.

25.HanLP.Config.ShowTermNature = False

27.text = HanLP.s2tw("現在的HanLP已經添加了新增自定義詞典之後,自動刪除快取的功能,現在只需要開啟正則化即可")

28.print(text)

29.print(HanLP.segment(text))

30.HanLP.Config.ShowTermNature = False

 

1.HanLP.Config.Normalization = False

2.

3.[愛聽4g]

4.[愛聽4G]

5.[愛, 聽, 4, G]

6.[愛, 聽, 4, G]

7.[愛, 聽, 4, G]

8.[喜歡, 4, G]

9.[hankcs, 在, 臺, 灣寫, 代, 碼]

10.

11.HanLP.Config.Normalization = True

12.

13.[愛聽4g]

14.[愛聽4g]

15.[愛聽4g]

16.[愛聽4g]

17.[愛聽4g]

18.[喜歡, 4, g]

19.[hankcs, 在, 臺灣, 寫, 程式碼]

20.現在的HanLP已經新增了新增自定義詞典之後,自動刪除快取的功能,現在只需要開啟正則化即可

21.[現在, 的, hanlp, 已經, 新增, 了, 新增, 自定義, 詞典, 之後, ,, 自動, 刪除, 快, 取, 的

---------------------

相關推薦

漢語言處理工具pyhanlp拼音轉換字元

開發十年,就只剩下這套架構體系了! >>>   

自然語言處理工具pyhanlp分詞詞性標註

Pyhanlp分詞與詞性標註的相關內容記得此前是有分享過的。可能時間太久記不太清楚了。以下文章是分享自“baiziyu”所寫(小部

機器學習之路: python線性回歸 過擬合 L1L2

擬合 python sco bsp orm AS score 未知數 spa git:https://github.com/linyi0604/MachineLearning 正則化: 提高模型在未知數據上的泛化能力 避免參數過擬合正則化常用的方法: 在目

深度學習基礎--norm--(Regularization)

正則化(Regularization)   一種防止過擬合,提高泛化能力的技巧,因此演算法正則化的研究成為機器學習中主要的研究主題。此外,正則化還是訓練引數數量大於訓練資料集的深度學習模型的關鍵步驟。   正則化可以避免演算法過擬合,過擬合通常發生在演算法學習的輸入資料無法反應真實的分佈

深度學習基礎--norm--技術

正則化技術   一種防止過擬合,提高泛化能力的技巧,因此演算法正則化的研究成為機器學習中主要的研究主題。此外,正則化還是訓練引數數量大於訓練資料集的深度學習模型的關鍵步驟。   正則化可以避免演算法過擬合,過擬合通常發生在演算法學習的輸入資料無法反應真實的分佈且存在一些噪聲的情況。   

SVM支援向量機系列理論(七) 線性支援向量機L2 Platt模型

7.1 軟間隔SVM等價於最小化L2正則的合頁損失 上一篇 說到, ξi ξ i \xi_i 表示偏離邊界的度量,若樣本點

L1L2

在機器學習中,我們茶廠聽到L1和L2正則化,用他們來防止過擬合,但是在什麼情況下使用它們和它們的原理是什麼樣的可能一知半解。所以在本部落格中將對L1和L2做簡單的介紹和應用場景。 如果引數過多,模型過於複雜,容易造成過擬合(overfit)。即模型在訓練樣本資料上表現的很好

L1L2的理解

一、概括: L1和L2是正則化項,又叫做罰項,是為了限制模型的引數,防止模型過擬合而加在損失函式後面的一項。 二、區別:   1.L1是模型各個引數的絕對值之和。    L2是模型各個引數的平方和的開方值。   2.L1會趨向於產生少量的特徵,而其他的特徵都是0.     因為最優的引數值很大概率

萬用字元便於查詢和替換批量處理,使用在word,notepad++等文字編輯器中

我們常常使用查詢替換的方式來處理相關資料,可是當你要批量替換隻用一些相同字元分文字時,就會顯得很笨拙。 比如:     Line 5974: DI 10.13182/NT96-A15844     Line 6078: DI 10.1109/ISIC.1996.55623

資料預處理中歸一(Normalization)損失函式中(Regularization)解惑

背景:資料探勘/機器學習中的術語較多,而且我的知識有限。之前一直疑惑正則這個概念。所以寫了篇博文梳理下 摘要:   1.正則化(Regularization)     1.1 正則化的目的      1.2 結構風險最小化(SRM)理論     1.3 L1範數

神經網路資料預處理損失函式

1. 引言 上一節我們講完了各種激勵函式的優缺點和選擇,以及網路的大小以及正則化對神經網路的影響。這一節我們講一講輸入資料預處理、正則化以及損失函式設定的一些事情。 2. 資料與網路的設定 前一節提到前向計算涉及到的元件(主要是神經元)設定。神經網路結構和引數設定完畢之後,我們就得到得分

TensorFlow 過擬合(regularizer)

sdn 就是 one 方式 regular logs none 使用 log 所謂過擬合,就是當一個模型過於復雜後,它可以很好的處理訓練數據的每一個數據,甚至包括其中的隨機噪點。而沒有總結訓練數據中趨勢。使得在應對未知數據時錯誤裏一下變得很大。這明顯不是我們要的結果。 我們

ng機器學習視頻筆記(五) ——過擬合

哪些 重復 關註 osi 現實 regular 鏈接 梯度下降 簡單 ng機器學習視頻筆記(五) ——過擬合與正則化 (轉載請附上本文鏈接——linhxx) 一、過擬合和欠擬合 1、概念 當針對樣本集和特征值,進行預測的時候,推導θ、梯度下降等,都在

單細胞數據初步處理 | drop-seq | QC | 質控 | normalization

procedure out glm 技術分享 its unique quit only reg 比對 The raw Drop-seq data was processed with the standard pipeline (Drop-seq tools versio

grep,sed,awk簡單表達式應用

Linux學習grep,sed,awk與簡單正則表達式應用 這裏使用的測試文件是linux /etc/passwd文件,最好是復制一份進行練習,方式對文件內容造成損壞。感覺還是要多練習才能很好的使用,習題這裏就不貼了,網上一找一大把。 grep:   -o 用作計算出現多少次字段&e

CS229 Machine Learning學習筆記:Note 5(模型選擇)

n) 不重復 所有 交叉 war 比例 class 搜索 machine 模型選擇 假設目前有d個學習模型構成的集合\(\mathcal M=\{M_1,\cdots,M_d\}\),訓練集S,下面介紹幾種選取模型的方法 Hold-out cross validation(

——“偏差(bias)”“方差(variance)”

正則化後的線性迴歸模型 模型 \[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2} + {\theta _3}{x^3} + {\theta _4}{x^4}\] \[J\left( \theta&nb

資料預處理——標準化、歸一

三者都是對資料進行預處理的方式,目的都是為了讓資料便於計算或者獲得更加泛化的結果,但是不改變問題的本質。 標準化(Standardization) 歸一化(normalization) 正則化(regularization) 歸一化 我們在對資料進行分析的時候,往往會遇到單個數據的各個維度量綱不同的

比較準確完整的中文字元校驗

網上大多數校驗中文的正則都是\u4e00-\u9fa5,經過實際測試,這個正則無法匹配中文標點,如(),。等 仔細研究了unicode的規範,本著儘量寬泛、遵循unicode分類的原則,總結了一套比較準確完整的校驗規則:   // http://www.unicode

《機器學習》筆記---2 模型的損失函式

損失函式 度量模型一次預測的好壞 L( Y,f(X) ) 常見型別: 期望風險(風險函式) 度量平均意義下的模型預測的好壞,即損失函式的期望。(關於 聯行分佈的期望,未知,無法直接計算) 經驗風險 模型關於訓練