python中,str.isnumeric可以判別字串是否為數字,包括中文字元也可以正常判斷,例如:
str.isnumeric('伍拾叄')
str.isnumeric('五十三')
結果都返回true
但對於這些unicode的字元,單個字元可以通過unicodedata.numeric轉換為數值,長字串就不行了。
查閱了各位大神的漢字轉數值實現,總覺得不那麼符合我的思路,這裡我提出一種思路來解決這種問題。
**如下(注:以下**僅用於示例,未進行異常判斷和出錯處理):
# hztonumber也可以用如下**實現,以解決大寫中文漢字(如壹貳叄)的問題
# import unicodedata
# unicodedata.numeric(hz)
def hztonumber(hz):
return '零一二三四五六七**'.find(hz)
splits_ch = ('億', '萬', '千', '百', '十')
splits_val = (100000000, 10000, 1000, 100, 10)
def word2number(word, split_idx = 0):
split_ch = self.splits_ch[split_idx]
split_val = self.splits_val[split_idx]
pos = word.find(split_ch)
if pos >= 0:
left = word[:pos]
right = word[pos+1:]
if not left:
left_num = 1
else:
if split_idx < len(self.splits_ch) - 1:
left_num = word2number(left, split_idx + 1)
else:
left_num = hztonumber(left.replace('零', ''))
if not right:
right_num = 0
else:
if split_idx < len(self.splits_ch) - 1:
right_num = word2number(right, split_idx + 1)
else:
right_num = hztonumber(right.replace('零', ''))
val = left_num * split_val + right_num
else:
if split_idx < len(self.splits_ch) - 1:
val = word2number(word, split_idx + 1)
else:
val = hztonumber(word.replace('零', ''))
return val
處理思路:
1、確認文字中是否存在「億/萬/千/百/十」
2、如果存在,將其從該字分成字左邊、右邊兩部分
3、將左邊、右邊兩部分分別以 數量級更低 的「億/萬/千/百/十」以同樣方法區分,直到劃分到只有個位為止
4、將個位轉換為數值,再疊加回來。
舉例步驟如下:
一千二百三十億四千五百六十七萬八千零九十一
1: 查詢億: 一千二百三十 四千五百六十七萬八千零九十一
2: 查詢萬: 無,繼續查詢千 四千五百六十七 八千零九十一
3: 查詢千: 一 二百三十 四 五百六十七 八 零九十一
4: 1 二 三十 4 五 六十七 8 零九 一
5 1 2 三 4 5 六 七 8 9 1
6 1 2 3 4 5 6 7 8 9 1
7 1 2 3*10 4 5 6*10+7 8 9*10+1
8 1 2*100+30 4 5*100+67 8*1000+91
9 1*1000+230 4*1000+567 8091
10 1230 4567*10000+8091
11 1230*100000000+45678091
這種處理方式還可以處理213寫成」二百十三「,而不是」二百一十三「的內容。
數字轉中文數字與中文數字轉數字
利用陣列與map的資料結構進行中文數字與數字之間的互相轉換 public class numberutil private static final char cn num private static final char cn unit private static final string c...
使用python提取中文數字和英文
因為訓練word2vec模型,需要處理資料集發現其中有很多特殊符號,所以使用py thon 3 pyt hon3 進行了資料預處理,去除了預料中的特殊符號,這裡使用unicode加正規表示式來進行相關的匹配。import re string 12345464我不是藥神123456abcdefgabc...
Oracle中文 數字混雜欄位的排序
對oracle中中文 數字混雜形式的字段進行排序的方法 例如 order by nlssort 欄位名,nls sort schinese pinyin m to number translate 欄位名,0123456789 欄位名,0123456789 nlssort 函式 如果資料庫字符集選用...