找回密码
 加入
搜索
查看: 2654|回复: 12

[网络通信] [已解决] 两组共8个单选框如何检测变动?

[复制链接]
发表于 2019-6-19 14:45:35 | 显示全部楼层 |阅读模式
本帖最后由 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

发表于 2019-6-19 16:05:51 | 显示全部楼层
那样太浪费资源了… 虽不懂具体用途,但可以稍改一下
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

评分

参与人数 1威望 +2 金钱 +50 收起 理由
chishingchan + 2 + 50 还以为a大会给我惊喜呢?!

查看全部评分

发表于 2019-6-19 18:05:23 | 显示全部楼层
因为不知道作何用,只能根据你的改。以下为个人示例
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
 楼主| 发表于 2019-6-19 22:42:44 | 显示全部楼层
本帖最后由 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 大可以写一个很好的出来,因为您对文件编码方面比较熟悉。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2019-6-19 22:46:41 | 显示全部楼层
本帖最后由 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) 簡體到香港繁體(香港小學學習字詞表標準)


 楼主| 发表于 2019-6-19 22:50:46 | 显示全部楼层
源码:


已编译:



在线转换:
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取得聯繫。
完了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2019-6-20 12:17:10 | 显示全部楼层
#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

评分

参与人数 1威望 +2 金钱 +50 贡献 +10 收起 理由
chishingchan + 2 + 50 + 10 很给力!

查看全部评分

发表于 2019-6-20 12:48:13 | 显示全部楼层

单选框被点击时只有一种状态——选中。所以,这些读取判断都是多余的……
发表于 2019-6-20 12:50:00 | 显示全部楼层

这个很简单,但自己做成功会更好~
发表于 2019-6-20 12:58:38 | 显示全部楼层
afan 发表于 2019-6-20 12:48
单选框被点击时只有一种状态——选中。所以,这些读取判断都是多余的……

是的,单选框是只有一种状态。
写上判断是考虑到控件是复选框的情况。
发表于 2019-6-20 13:07:37 | 显示全部楼层
haijie1223 发表于 2019-6-20 12:58
是的,单选框是只有一种状态。
写上判断是考虑到控件是复选框的情况。

他的问题是只有两组单选框,且有变化时才做出反应~

看他设计的界面,如果有复选框的参与,在最后应用时读取一次就哦了个K了~
 楼主| 发表于 2019-6-21 09:21:08 | 显示全部楼层
afan 发表于 2019-6-20 13:07
他的问题是只有两组单选框,且有变化时才做出反应~

看他设计的界面,如果有复选框的参与,在最后应用 ...

重写了!推翻变量,直接 Case $IntputRadio
发表于 2019-6-21 09:33:46 | 显示全部楼层
E。。为啥我会收到这往篇贴的消息。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 10:29 , Processed in 0.079796 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表