[已解决] 两组共8个单选框如何检测变动?
本帖最后由 chishingchan 于 2019-6-20 17:58 编辑例如:在一个 GUI 中有两组单选框如下:
()1()2()3()4
()A()B()C()D
在循环中 如何检测 其中单选框有(选择)变动?
请指教,谢谢!
我的笨方法:
Local $i,$j,$k,$l,$m,$n,$o,$p,$q,$r,$s,$t,$u,$v,$w,$x
While 1
$i = GUICtrlRead($IntputRadio1)
$j = GUICtrlRead($IntputRadio2)
$k = GUICtrlRead($IntputRadio3)
$l = GUICtrlRead($IntputRadio4)
$m = GUICtrlRead($OutputRadio1)
$n = GUICtrlRead($OutputRadio2)
$o = GUICtrlRead($OutputRadio3)
$p = GUICtrlRead($OutputRadio4)
If $q <> $i Or $r <> $j Or $s <> $k Or $t <> $l Or $u <> $m Or $v <> $n Or $w <> $o Or $x <> $p Then
If GUICtrlRead($IntputRadio1) + GUICtrlRead($IntputRadio3) + GUICtrlRead($OutputRadio1) + GUICtrlRead($OutputRadio3) = 10 Then
GUICtrlSetState($OutputCheckbox, $GUI_ENABLE)
Else
GUICtrlSetState($OutputCheckbox, $GUI_UNCHECKED + $GUI_DISABLE)
EndIf
EndIf
$q = $i
$r = $j
$s = $k
$t = $l
$u = $m
$v = $n
$w = $o
$x = $p
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
那样太浪费资源了… 虽不懂具体用途,但可以稍改一下
Local $i, $j, $k, $l, $m, $n, $o, $p, $q, $r, $s, $t, $u, $v, $w, $x
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $IntputRadio1 To $OutputRadio4 ; $IntputRadio1 到 $OutputRadio4 为连续创建的控件
$i = GUICtrlRead($IntputRadio1)
$j = GUICtrlRead($IntputRadio2)
$k = GUICtrlRead($IntputRadio3)
$l = GUICtrlRead($IntputRadio4)
$m = GUICtrlRead($OutputRadio1)
$n = GUICtrlRead($OutputRadio2)
$o = GUICtrlRead($OutputRadio3)
$p = GUICtrlRead($OutputRadio4)
If $q <> $i Or $r <> $j Or $s <> $k Or $t <> $l Or $u <> $m Or $v <> $n Or $w <> $o Or $x <> $p Then
If GUICtrlRead($IntputRadio1) + GUICtrlRead($IntputRadio3) + GUICtrlRead($OutputRadio1) + GUICtrlRead($OutputRadio3) = 10 Then
GUICtrlSetState($OutputCheckbox, $GUI_ENABLE)
Else
GUICtrlSetState($OutputCheckbox, $GUI_UNCHECKED + $GUI_DISABLE)
EndIf
EndIf
$q = $i
$r = $j
$s = $k
$t = $l
$u = $m
$v = $n
$w = $o
$x = $p
EndSwitch
WEnd 因为不知道作何用,只能根据你的改。以下为个人示例
Opt('GUIOnEventMode', 1)
Global $id_1, $id_2, $id_3, $id_4, $id_5, $id_6, $id_7, $id_8
Global $State_1, $State_2
_Test()
While 1
Sleep(1000)
WEnd
Func _Test()
#Region :: START AuGUIDesigner ::
GUICreate('')
GUISetOnEvent(-3, '_GuiClose')
Dim $id_1 = GUICtrlCreateRadio('1', 30, 35, 68, 20)
Dim $id_2 = GUICtrlCreateRadio('2', 114, 35, 68, 20)
Dim $id_3 = GUICtrlCreateRadio('3', 199, 35, 68, 20)
Dim $id_4 = GUICtrlCreateRadio('4', 284, 35, 68, 20)
GUIStartGroup()
Dim $id_5 = GUICtrlCreateRadio('A', 30, 95, 68, 20)
Dim $id_6 = GUICtrlCreateRadio('B', 114, 95, 68, 20)
Dim $id_7 = GUICtrlCreateRadio('C', 199, 95, 68, 20)
Dim $id_8 = GUICtrlCreateRadio('D', 284, 95, 68, 20)
GUISetState()
#EndRegion :: END AuGUIDesigner ::
Dim $State_1 = $id_1
Dim $State_2 = $id_8
GUICtrlSetState($State_1, 1)
GUICtrlSetState($State_2, 1)
For $ii = $id_1 To $id_8
GUICtrlSetOnEvent($ii, '_CK')
Next
EndFunc ;==>_Test
Func _Ck()
If @GUI_CtrlId = $State_1 Or @GUI_CtrlId = $State_2 Then Return
If @GUI_CtrlId > $id_4 Then
Dim $State_2 = @GUI_CtrlId
MsgBox(0, '组2', '已改变为: ' & GUICtrlRead($State_2, 1))
Else
Dim $State_1 = @GUI_CtrlId
MsgBox(0, '组1', '已改变为: ' & GUICtrlRead($State_1, 1))
EndIf
EndFunc ;==>_Ck
Func _GuiClose()
Exit
EndFunc ;==>_GuiClose 本帖最后由 chishingchan 于 2019-6-19 23:00 编辑
afan 发表于 2019-6-19 18:05
因为不知道作何用,只能根据你的改。以下为个人示例
最近我发现一个最新版的 OpenCC (开放中文转换) 程序,原版附带了一个 AHK 脚本,AHK 与 AU3 原本是一家,但是看着界面比较单调点!
opencc_ahk_gui.ahk
;
; OpenCC GUI (AutoHotkey Version)
;
; Created on 28-12-2017
;
; Coded by SeIsland
;
; Version 1.0.0
;
; Posted on puresoftapps.blogspot.com
;
#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
Loop %A_WorkingDir%\*.json
json .= (( json <> "" ) ? "|" : "" ) A_LoopFileName
Gui Add, Text, x16 y16 w120 h23 +0x200, Input Folder
Gui Add, Edit, vinput_path x16 y48 w340 h21
Gui Add, Button, gInputBrowse x376 y48 w80 h23, Browse
Gui Add, Text, x16 y80 w120 h23 +0x200, Output Folder
Gui Add, Edit, voutput_path x16 y120 w340 h21
Gui Add, Button, gOutputBrowse x376 y120 w80 h23, Browse
Gui Add, Text, x16 y160 w120 h23 +0x200, Configurations
Gui Add, DropDownList, vjsonselected x144 y160 w91, %json%
Gui Add, Button, gConvert x376 y160 w80 h23, Convert
Gui Show, w479 h205, OpenCC GUI (AutoHotkey Version)
Return
InputBrowse:
FileSelectFolder, input_path,,, Select Input Folder
GuiControl,, input_path, %input_path%
Return
OutputBrowse:
FileSelectFolder, output_path,,, Select Output Folder
GuiControl,, output_path, %output_path%
Return
Convert:
GuiControlGet, input_path
GuiControlGet, output_path
GuiControlGet, jsonselected
If (input_path="")
{
MsgBox,, Error, Input directory is not set.
Return
}
else if !FileExist(input_path)
{
MsgBox,, Error, Input directory is not found.
Return
}
If (output_path="")
{
MsgBox,, Error, Output directory is not set.
Return
}
If (jsonselected="")
{
MsgBox,, Error, Configuration is not set.
Return
}
Loop Files, %input_path%\*.*, R
{
StringReplace, output_filepath, A_LoopFileFullPath, %input_path%, %output_path%, A
StringReplace, output_subfolder_path, output_filepath, \%A_LoopFileName%,, A
FileCreateDir, %output_subfolder_path%
Progress, %a_index%, %a_loopfilename%, Converting..., Progress
runwait, opencc.exe "-i" "%A_LoopFileFullPath%" "-o" "%output_filepath%" "-c" "%jsonselected%", %A_WorkingDir%, Hide
Sleep, 50
}
Progress, off
return
GuiEscape:
GuiClose:
ExitApp
所以打算自己再写一个。(未完工)
其实这个程序我编写起来还是比较吃力,有些想要的功能还没有能力弄上去,例如:识别输入文件的编码、批量拖入文件等待。感觉 a 大可以写一个很好的出来,因为您对文件编码方面比较熟悉。
本帖最后由 chishingchan 于 2019-6-19 23:03 编辑
单选项的功能:
简体与台湾互转的话 词汇 亮了
繁体转换 标准 亮了
即根据单选项确定应用哪个“预设配置文件”
預設配置文件
s2t.json Simplified Chinese to Traditional Chinese 簡體到繁體
t2s.json Traditional Chinese to Simplified Chinese 繁體到簡體
s2tw.json Simplified Chinese to Traditional Chinese (Taiwan Standard) 簡體到臺灣正體
tw2s.json Traditional Chinese (Taiwan Standard) to Simplified Chinese 臺灣正體到簡體
t2tw.json Traditional Chinese (OpenCC Standard) to Taiwan Standard 繁體(OpenCC 標準)到臺灣正體
t2hk.json Traditional Chinese (OpenCC Standard) to Hong Kong Standard 繁體(OpenCC 標準)到香港繁體(香港小學學習字詞表標準)
s2twp.json Simplified Chinese to Traditional Chinese (Taiwan Standard) with Taiwanese idiom 簡體到繁體(臺灣正體標準)並轉換爲臺灣常用詞彙
tw2sp.json Traditional Chinese (Taiwan Standard) to Simplified Chinese with Mainland Chinese idiom 繁體(臺灣正體標準)到簡體並轉換爲中國大陸常用詞彙
hk2s.json Traditional Chinese (Hong Kong Standard) to Simplified Chinese 香港繁體(香港小學學習字詞表標準)到簡體
s2hk.json Simplified Chinese to Traditional Chinese (Hong Kong Standard) 簡體到香港繁體(香港小學學習字詞表標準)
源码:
已编译:
在线转换:
https://opencc.byvoid.com/
Open Chinese Convert 開放中文轉換
Introduction 介紹
Open Chinese Convert (OpenCC, 開放中文轉換) is an opensource project for conversion between Traditional Chinese and Simplified Chinese, supporting character-level conversion, phrase-level conversion, variant conversion and regional idioms among Mainland China, Taiwan and Hong kong.
中文簡繁轉換開源項目,支持詞彙級別的轉換、異體字轉換和地區習慣用詞轉換(中國大陸、臺灣、香港)。
Features 特點
嚴格區分「一簡對多繁」和「一簡對多異」。
完全兼容異體字,可以實現動態替換。
嚴格審校一簡對多繁詞條,原則爲「能分則不合」。
支持中國大陸、臺灣、香港異體字和地區習慣用詞轉換,如「裏」「裡」、「鼠標」「滑鼠」。
詞庫和函數庫完全分離,可以自由修改、導入、擴展。
支持C、C++、Python、PHP、Java、Ruby、Node.js and Android。
兼容Windows、Linux、Mac平臺。
Links 相關鏈接
Introduction 詳細介紹 https://github.com/BYVoid/OpenCC/wiki/%E7%B7%A3%E7%94%B1
OpenCC Online (在線轉換) http://opencc.byvoid.com/
現代漢語常用簡繁一對多字義辨析表 http://ytenx.org/byohlyuk/KienxPyan
Installation 安裝
Debian
Ubuntu
Fedora
Arch Linux
Mac OS
Node.js
Download 下載
https://bintray.com/byvoid/opencc/OpenCC
Usage 使用
Command Line 命令行
opencc --help
Configurations 配置文件
預設配置文件
s2t.json Simplified Chinese to Traditional Chinese 簡體到繁體
t2s.json Traditional Chinese to Simplified Chinese 繁體到簡體
s2tw.json Simplified Chinese to Traditional Chinese (Taiwan Standard) 簡體到臺灣正體
tw2s.json Traditional Chinese (Taiwan Standard) to Simplified Chinese 臺灣正體到簡體
t2tw.json Traditional Chinese (OpenCC Standard) to Taiwan Standard 繁體(OpenCC 標準)到臺灣正體
t2hk.json Traditional Chinese (OpenCC Standard) to Hong Kong Standard 繁體(OpenCC 標準)到香港繁體(香港小學學習字詞表標準)
s2twp.json Simplified Chinese to Traditional Chinese (Taiwan Standard) with Taiwanese idiom 簡體到繁體(臺灣正體標準)並轉換爲臺灣常用詞彙
tw2sp.json Traditional Chinese (Taiwan Standard) to Simplified Chinese with Mainland Chinese idiom 繁體(臺灣正體標準)到簡體並轉換爲中國大陸常用詞彙
hk2s.json Traditional Chinese (Hong Kong Standard) to Simplified Chinese 香港繁體(香港小學學習字詞表標準)到簡體
s2hk.json Simplified Chinese to Traditional Chinese (Hong Kong Standard) 簡體到香港繁體(香港小學學習字詞表標準)
Development Documentation 開發文檔
http://byvoid.github.io/OpenCC/
Build 編譯
Build with CMake
Linux (gcc 4.6 is required):
make
sudo make install
Mac OS X (clang 3.2 is required):
make PREFIX=/usr/local
sudo make PREFIX=/usr/local install
Windows MSYS:
cmake -H. -Bbuild -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX="path/to/install"
cmake --build build --config Release --target install
Windows Visual Studio (2013 or higher required):
cmake -H. -Bbuild -G"Visual Studio 12" -DCMAKE_INSTALL_PREFIX="path/to/install"
cmake --build build --config Release --target install
iOS
See https://github.com/gelosie/OpenCC/tree/master/iOS
Or SwiftyOpenCC
Android
See android-opencc
Projects using Opencc 使用OpenCC的項目
ibus-pinyin
fcitx
rimeime
libgooglepinyin
ibus-libpinyin
BYVBlog
alfred-chinese-converter
GoldenDict
License 許可協議
Apache License 2.0
Third Party Library 第三方庫
darts-clone BSD License
tclap MIT License
rapidjson MIT License
All these libraries are statically linked.
Change History 版本歷史
https://github.com/BYVoid/OpenCC/blob/master/NEWS.md
Contributors 貢獻者
BYVoid
佛振
Peng Huang
LI Daobing
Kefu Chai
Kan-Ru Chen
Ma Xiaojun
Jiang Jiang
Ruey-Cheng Chen
Paul Meng
Lawrence Lau
瑾昀
Marguerite Su
Brian White
Qijiang Fan
LEOYoon-Tsaw
Steven Yao
Pellaeon Lin
stony
steelywing
吕旭东
Weng Xuetian
Ma Tao
Heinz Wiesinger
J.W
Amo Wu
Mark Tsai
Zhe Wang
sgqy
Qichuan (Sean) ZHANG
Flandre Scarlet
宋辰文
iwater
Xpol Wan
Weihang Lo
Cychih
kyleskimo
Ryuan Choi
Please update this list you have contributed OpenCC.
Change History of OpenCC
Version 1.0.5
2017年2月6日
修正Windows下CMake和Visual Studio的問題。
修正FNV Hash的32位編譯警告。
增加若干臺灣常用詞彙轉換和異體字轉換。
增加和修正若干轉換問題。
加快Node模塊編譯速度。
增加Node模塊的詞典轉換接口和Promise接口。
Version 1.0.4
2016年4月1日
使編譯時的腳本兼容Python 3。
修正Visual C++ 2015的編譯問題。
增補臺灣、香港地區用字用詞轉換。
更新nan以修正Node.js擴展編譯兼容性問題。
Version 1.0.3
2015年7月22日
添加化學元素臺灣用字轉換。
增補100餘組缺失的簡繁轉換字對。
增補香港標準字。
使用nan解決Node.js擴展編譯兼容性問題。
命令行轉換工具支持就地轉換。
測試框架遷移到GTest。
修正Visual C++的編譯問題。
實現無詞典詞彙抽取和分詞算法。
優化轉換性能。
Version 1.0.2
2014年11月8日
修正C語言接口的編譯錯誤問題
修正默認簡繁轉換文件名錯誤問題
DictEntry增加Values()方法
Version 1.0.1
2014年10月18日
使用C++11完全重寫OpenCC
修復大量轉換錯誤
增加香港繁體轉換
Version 0.4.3
2013年5月17日
增加接口opencc_convert_utf8_free
修正Node.js插件內存泄漏問題
修正Windows下獲取當前目錄的問題
Version 0.4.2
2013年4月14日
修正「阪」、「薰」繁簡轉換
增加四對缺失的簡繁轉換
增加API文檔,由Doxygen生成
重構大量代碼
Version 0.4.1
2013年3月21日
修正Node.js 0.10兼容性問題。
從Unihan數據庫增加若干缺失的簡繁轉換單字。
Version 0.4.0
2013年3月2日
修正「雕」「谥」「峯」轉換,新增數百條臺灣科技詞彙。
修正命令行-h錯誤。
修正長行讀取錯誤。
修正錯誤類型拼寫錯誤。
修正UTF-8編碼轉換錯誤。
自動跳過UTF-8的BOM。
修正配置和數據文件相對路徑問題。
增加了gyp編譯系統。
增加了Node.js接口。
Version 0.3.0
2011年12月2日
增加中國大陸、臺灣地區異體字和習慣用詞轉換功能。
修正詞典轉換鏈爲奇數時的緩衝區複製Bug。
修正Big Endian平臺上的UTF-8轉換錯誤。
修正「齣」「薑」詞組的問題。
修正「钁」「卷」「干」「薰」「糉」「蝨」「麺」。
增加「綑」到「捆」的繁簡轉換。
增加「跡」「蹟」對立。
增加「夫」「伕」對立。
增加「毀」「譭」「燬」對立。
增加「背」「揹」對立。
Version 0.2.0
2010年12月23日
取消libopencc對iconv的依賴。
增加UTF8編碼格式錯誤時提示信息。
重構Python封裝。
修正讀取一行長度超過緩衝區時的UTF8截斷錯誤。
使用CMake代替Autotools構建編譯框架。
修正包括「拿不準」在內諸多簡繁轉換問題。
Version 0.1.2
2010年9月16日
增加「僅分詞」和「顯示多重候選字詞」的轉換接口。
改進辭典文件的結構。
修正轉換緩衝區永遠不足的Bug。
修正多辭典轉換時略過某個辭典的Bug。
修正輸入爲空時轉換的Bug。
改進opencc命令行工具參數提示和幫助。
Version 0.1.1
2010年8月10日
增加簡繁混雜到簡體或繁體的轉換。
增加多詞典/詞典組的轉換支持。
修正big endian平臺上的兼容性問題。
修正apple平臺下編譯iconv依賴的問題。
修正辭典中詞條長度長度不相等時轉換錯誤的Bug。
重構辭典代碼抽象。
增加編譯時的測試。
分離辭典爲字典和詞典。
Version 0.1.0
2010年7月28日
修正文件名緩衝區不足的Bug。
libopencc版本更新至1.0.0。
分離臺灣特有的繁簡轉換「著」「么」。
修改「众」「教」「查」「污」對應默認異體。
加入「齧啮」「灩滟」繁簡轉換。
增加「岳嶽」一簡對多繁轉換。
隱藏不必要的類型,更新接口註釋。
Version 0.0.5
2010年7月21日
修正wchar_t兼容性問題,使用ucs4。
增加Windows移植分支。
修正一個文件名緩衝區分配的問題。
增加「囉」「溼」「廕」「彷」「徵」繁簡轉換。
Version 0.0.4
2010年7月16日
增加「卹」「牴」「皁」「羶」「薹」等轉換。
精簡辭典中大量不必要的數詞(含「千」「萬」)。
修正最短路徑分詞時優先後向匹配的實現問題。
修正辭典加載兼容性問題,當無法mmap時直接申請內存。
修正C++接口在64位平臺下編譯的問題。
Version 0.0.3
2010年6月22日
加入繁體到簡體的轉換。
增加提示信息的中文翻譯,使用GNU Gettext。
增加辭典配置文件支持。
修正一些兼容性Bug。
Version 0.0.2
2010年6月19日
分離詞庫。
增加平面文件詞庫讀取的支持。
增加平面文件詞庫到Datrie詞庫的轉換工具opencc_dict。
提供UTF8文本直接轉換的接口。
Version 0.0.1
2010年6月11日
OpenCC初始版本釋出。
支持簡繁轉換。
Open Chinese Convert 開源簡繁轉換
Open Chinese Convert(OpenCC)是一個中文簡繁轉換開源項目,提供簡繁轉換詞庫和可供程序調用的程序庫(libopencc)。現託管於Google Code。
關於簡繁轉換
由於種種歷史問題,漢字系統被割裂爲「簡化字」和「繁體字」,然而「簡化字」並不能完全取代原有的繁體字,一方面是由於古籍、書法、文字學的研究需要,另一方面則是港澳臺日韓越及其他海外地區「簡化字」並不通行。隨着信息技術的發展,這方面的需求不斷突出,因此簡繁轉換便成了一個信息技術界和中文研究界需要共同解決的問題。
精確的簡繁轉換一直以來是一個難題,其原因主要是簡體和繁體互有一對多的現象,而具體用字對應規則需要聯繫上下文分析語義纔能確定。而廣義的「簡繁轉換」,還包括了不同地域習慣用字和用詞差異的轉換(如「软件」「軟體」等),甚至詞和詞之間也有「一對多」的關係,因而使轉換更加複雜。目前現有的簡繁轉換軟件,即使是專業的(收費),也不能完全解決這些問題,在開源界能接近其水平的更是寥寥無幾。因此OpenCC的誕生,就是爲了儘可能地解決這個難題。
一些概念
漢字(據不完全統計)有十萬之眾,「簡化字」非但沒有減少漢字數量,反而使漢字數量更加龐大。雖然日常用到的字祇有數千,且有着複雜的關係。要做好簡繁轉換,必須理解這之中的許多關係與微妙的差別。
「異體字」
由於漢字造字年代久遠,且非一人一時之所造,通行時間又爲世界之最,流變眾多,許多字並非祇有一種寫法,如「為爲」「朵朶」「畫畵」「污汚汙」等等。這些字祇是寫法不同,而沒有任何表意的區別,因此被稱爲「異體字」。狹義的異體字是沒有任何表意的區別的一組字,而廣義的異體字還包含了表意範圍有交叉或所屬關係的字以及「通假字」。下文中的異體字全部是狹義的異體字。
需要注意的是「通假字」祇是同音假借,本字和被假借字可能意義完全不同,因而不是異體字。而「訛字」和「俗字」(絕大多數)則屬於異體字。例如「繫」字在傳抄的時候,左上角被寫成了「車」,然後以訛傳訛,就產生了訛字「繋」。「俗字」或稱「俗體字」是民間通行的一種變體,許多俗字就是筆畫較爲減省的異體字,也有很多來自訛字。
「繁體字」「簡體字」「簡化字」
嚴格地說,「繁體字」和「簡體字」是異體字關係,「繁體字」是相對「簡體字」而創造的概念。「簡體字」這一名稱,始見於1935年民國教育部總結的一批「古已有之」、「歷代通行」的「筆劃較少的」異體字。這批簡體字主要蒐集自民間話本「述而不作」地整理出,沒有類推造字。
「簡化字」,顧名思義則是人工簡化的字,這個概念的產生與近代「漢字改革」思潮有關,最早見於錢玄同的文中。1964年,中國文字改革委員會出版了《簡化字總表》(不是「簡體字總表」),簡化字開始在中國大陸流行開來。1977年,中央又發佈《第二次漢字簡化方案》,1986年被廢除,史稱「二簡字」。慢慢「簡化字」這一概念就被固定下來,專指中國大陸推行的簡化字。
可見「簡體字」並不等於「簡化字」,前者強調異體關係,後者強調簡化關係。而現在這兩個概念趨於混淆,乃至用「簡體字」表達「簡化字」的意義更常見,其主要原因是由於另一個詞彙「簡體中文」的出現。比起中文的混淆,英文解釋更加清楚:「簡化字」的英文翻譯是「simplified Chinese characters」(簡化過的漢字),simplified源自動詞simplify簡化。「簡體字」由於概念不常見,沒有公認的正式翻譯,有一種譯 作「simpler variants of Chinese characters」(較簡單的漢字變體)。
由於「簡體字」和「繁體字」本身存在對立關係,繁體字也就慢慢變成專指港澳臺用字了。事實上港澳臺用字也不盡相同,如「裏」「裡」等,於是又有了「港澳繁體」「臺灣正體」等名字。
已有項目的缺陷
OpenCC的的誕生並不是輪子的重複發明,而是爲了實現一個更好的簡繁轉 換計劃,因爲目前已有的各種項目,或多或少地有着各種缺陷。
Wikipedia
毫無疑問最廣爲人知的簡繁轉換項目莫過於Wikipedia提供的簡繁轉換表。Wikipedia有效地利用了分散的人力,整理出了一個數量不小的表格,其優點在於*詳細地區分了簡繁轉換和地域轉換。但是也有許多不足:
異體字處理混亂,「一簡對多異」被當作「一簡對多繁」處理。如「为」對應「爲為」。
一簡對多繁有眾多爭議,處理不統一,時分時不分。如「卷烟」「烟卷」分別用了「煙」和「菸」。
有大量不成詞的「詞」,祇爲正向最大轉換優化,不兼容別的分詞算法。如「们斗了胆」「們斗了膽」。
專爲Wikipedia設計,依賴編輯的人工干預。
一般非地域轉換中「着」被併入「著」,不符合香港、海外等地用字習慣。
使Wikipedia做出改變較難,尤其是在這種民主的管理模式下,多數人(臺灣)可能會毫不顧及少數人(香港)。
cconv
cconv是另一個簡繁轉換的項目,較早開發,有一定的用戶。缺陷很明顯:
簡繁轉換和地域轉換混同一談。
完全沒有處理異體字。
功能雜糅了編碼轉換和簡繁轉換,不易剝離。
簡繁轉換數據被編譯到庫中,無法修改和擴展(除非重新編譯)。
GPL協議發佈,對開發者限制較大。
目前長期無人維護。
OpenCC 的特點和方法
OpenCC特點
嚴格區分「一簡對多繁」和「一簡對多異」。
完全兼容異體字,可以實現動態替換。
嚴格審校一簡對多繁詞條,原則爲「能分則不合」。
使用歧義分割+最少分詞算法,儘可能從技術上優化轉換效果。
詞庫和程序庫完全分離,可以自由修改、導入、擴展。
以Apache開源協議發佈,使開發者真正可以自由使用。
已經用於ibus-pinyin的繁體模式輸入,由ibus開發組長期協助維護。
支持 C,C++,Python,PHP等多種語言調用,命令行直接調用,以及圖形界面(開發中)。
解釋
OpenCC有獨立的「一簡對多繁」表、「一繁對多簡」表和異體字表,保證沒有混雜着異體字。而且可以方便地自定義地區習慣使用的異體字,兼容臺灣、香港和海外地區不同的習慣。
簡繁轉換詞庫中數萬詞彙經過校對,最大可能地保證轉換準確性,用字原則爲「能分則不合」。舉例如「臺」「檯」「台」,在臺灣習慣中,有合流爲「台」的現象,但其意義界限明顯,故OpenCC從分,(具體見此列表)。根據不同的習慣,也可以設定爲合流。
簡繁轉換功能的核心算法爲歧義分割+最少分詞,簡單解釋爲首先掃描待轉換字符串,分割成若干個有歧義的區間(即每個區間內可以有多種分詞方案),然後對每個區間的字內構造圖論模型,使用最短路徑算法求出最優分割方案,然後對分詞的結果每部分進行轉換。這種算法不僅準確性高於直接正向掃描轉換,而且速度也很快,測試中每秒可以轉換8.4MB文本(UTF8編碼,內容爲小說,速度僅供參考)。
OpenCC把詞庫和程序庫完全分離,程序庫可以讀取兩種格式的詞庫,一種爲Tab分割的平面文本,一種爲OpenCC專門優化過的數據結構,ocd格式。平面文本數據庫格式方便閱讀和修改,ocd格式是OpenCC構造出的Double Array Trie數據結構,使用其可以大大提供轉換速度。OpenCC還提供了詞庫轉換程序,可以自由在兩種格式之間轉換。
OpenCC程序庫提供了C,C++,Python,PHP等語言的接口,便於在任何環境下使用,此外還提供了命令行直接調用的模式,圖形界面也在開發當中。
詞庫來源
OpenCC的繁體到簡體轉換的詞庫是由單字對應人工校對後生成的,單字對應數據來自Unicode數據庫以及人工的覈對和修改。簡體到繁體的詞庫由大量的繁體語料自動轉換到簡體然後校對而成。
參考資料
http://www.pkucn.com/forumdisplay.php?fid=144&page=1
http://input.foruto.com/ccc/data/proof/02.htm
http://www.mdbg.net/chindict/chindict.php
http://zh.wikipedia.org/wiki/
歡迎試用和加入
如果感興趣,可以先在綫試用一下, 然後安 裝到你的系統。
開源非一人之力,有眾人的支持纔能做得更好。歡迎有意者加入開發,歡迎中文專業者和愛好者加入詞庫審校工作。
如有任何問題或建議,請到 http://code.google.com/p/open-chinese-convert/issues/entry 報告。或者可以直接與BYVoid取得聯繫。
完了。
#NoTrayIcon
#include <APIConstants.au3>
Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)
Global $hForm = GUICreate("Form1", 580, 196, 192, 114)
Global $Radio1 = GUICtrlCreateRadio("Radio1", 56, 88, 113, 17)
Global $Radio2 = GUICtrlCreateRadio("Radio2", 192, 88, 113, 17)
Global $Radio3 = GUICtrlCreateRadio("Radio3", 360, 88, 113, 17)
GUISetState(@SW_SHOW)
GUISetOnEvent(-3, '_Exit')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
Sleep(100)
WEnd
Func _Exit()
Exit
EndFunc ;==>_Exit
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg,$wParam, $lParam
Local $hCtrl = $lParam
Local $iCtrlID = BitAND($wParam, 0xFFFF)
Local $iCode = BitShift($wParam, 16)
Switch $hWnd
Case $hForm
Switch $iCtrlID
Case $Radio1, $Radio2, $Radio3
ConsoleWrite('$hCtrl=' & $hCtrl & @CRLF)
ConsoleWrite('$iCtrlID=' & $iCtrlID & @CRLF)
ConsoleWrite('$iCode=' & $iCode & @CRLF)
ConsoleWrite('$iMsg=' & $iMsg & @CRLF)
MsgBox(0, 0, '当前操作的控件是:Radio' & $iCtrlID - 2 & @CRLF & '操作状态:' & (GUICtrlRead($iCtrlID) = $GUI_CHECKED ? '选中' : '取消选中')) ;GUICtrlGetState($iCtrlID)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
haijie1223 发表于 2019-6-20 12:17
单选框被点击时只有一种状态——选中。所以,这些读取判断都是多余的…… chishingchan 发表于 2019-6-19 22:50
源码:
这个很简单,但自己做成功会更好~ afan 发表于 2019-6-20 12:48
单选框被点击时只有一种状态——选中。所以,这些读取判断都是多余的……
是的,单选框是只有一种状态。
写上判断是考虑到控件是复选框的情况。 haijie1223 发表于 2019-6-20 12:58
是的,单选框是只有一种状态。
写上判断是考虑到控件是复选框的情况。
他的问题是只有两组单选框,且有变化时才做出反应~
看他设计的界面,如果有复选框的参与,在最后应用时读取一次就哦了个K了~ afan 发表于 2019-6-20 13:07
他的问题是只有两组单选框,且有变化时才做出反应~
看他设计的界面,如果有复选框的参与,在最后应用 ...
重写了!推翻变量,直接 Case $IntputRadio E。。为啥我会收到这往篇贴的消息。
页:
[1]