真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux平臺如何實現(xiàn)劃詞翻譯工具

這篇文章將為大家詳細講解有關(guān)Linux平臺如何實現(xiàn)劃詞翻譯工具,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

我們提供的服務(wù)有:做網(wǎng)站、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、伍家崗ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的伍家崗網(wǎng)站制作公司

所實現(xiàn)的劃詞翻譯工具主要有以下特性:

  • 支持英文單詞和短語到中文的翻譯

  • 劃詞翻譯,終端顯示

  • 自動過濾選中文本中的換行等特殊字符

  • 只依賴少數(shù)幾個 Linux 命令工具

下面有動圖進行演示。

Linux平臺如何實現(xiàn)劃詞翻譯工具

本人所使用的環(huán)境是運行在 VMware 虛擬機下的 Linux 發(fā)行版 Ubuntu 18.04.3 LTS,因此這里介紹的步驟可能與其他 Linux  發(fā)行版中的實現(xiàn)略有不同。下面就來一步一步的實現(xiàn)它吧。

一. 安裝必要的命令

1.xclip

$ sudo apt install xclip

xclip 命令建立了終端和剪切板之間通道,可以用命令的方式將終端輸出或文件的內(nèi)容保存到剪切板中,也可以將剪切板的內(nèi)容輸出到終端或文件。詳細的用法可以使用  man xclip,見其手冊。這里介紹幾個常用的用法。

$ xclip file_name # 文件內(nèi)容保存到X window剪切板 $ xclip -selection c file_name #文件內(nèi)容保存到外部剪切板 $ xclip -o # X window剪切板內(nèi)容輸出到終端顯示 $ xclip -selection c -o # 外部剪切板內(nèi)容輸出到終端顯示

值得強調(diào)的是,這里所說的 X window 剪切板,簡單的說就是你用鼠標選擇的文本會實時的存放在這個剪切板,使用鼠標中鍵可以粘貼。而外部剪切板是保存你用  ctrl+c 復(fù)制的文本,ctrl+v 可以粘貼。這兩個地方是不一樣的。

2.translate-shell

$ sudo apt install translate-shell

這是命令行版的谷歌翻譯工具,之前叫做 Google Translate CLI  是一款借助谷歌翻譯(默認)、必應(yīng)翻譯等來翻譯的命令行翻譯器。它讓你可以在終端訪問這些翻譯引擎。translate-shell 在大多數(shù) Linux  發(fā)行版中都能使用。常用的方法如下:

$ trans en:zh [word] # 英文到中文的單詞翻譯 $ trans en:zh -b [text] # 簡要的輸出,進行文本翻譯

需要注意的是,使用這個翻譯工具需要你能夠訪問外網(wǎng),或者通過修改 translate-shell 的默認翻譯引擎,具體的方法這里就不闡述了。

二. 編程實現(xiàn)

這個工具整體的思路就是 C 程序?qū)崟r檢測鼠標按鍵的動態(tài),當(dāng)檢測到用戶使用鼠標選擇一段文本之后,調(diào)用 shell 腳本獲取 X window  剪切板的內(nèi)容進行翻譯后輸出到終端顯示。

1. 定位鼠標設(shè)備文件

鼠標作為輸入設(shè)備。其信息可以在文件 /proc/bus/input/devices 中,使用下列命令查看:

$ sudo cat /proc/bus/input/devices I: Bus=0011 Vendor=0002 Product=0013 Version=0006 N: Name="VirtualPS/2 VMware VMMouse" P: Phys=isa0060/serio1/input1 S: Sysfs=/devices/platform/i8042/serio1/input/input4 U: Uniq= H: Handlers=mouse0 event2  B: PROP=0 B: EV=b B: KEY=70000 0 0 0 0 B: ABS=3

其中的 Handlers 的值 event2 表示可以在 /dev/input/event2  文件下讀取鼠標的狀態(tài)。需要注意的是,對于不同的設(shè)備,讀取鼠標的狀態(tài)的文件可能不一樣,比如也可能是 /dev/input/event3  。我們可以使用下面的命令找到你的鼠標對應(yīng)的是哪一個 event。

$ sudo cat /dev/input/event2 | hexdump # 測試時改變數(shù)字即可

比如,當(dāng)我運行上面這條命令之后,我移動鼠標、按鼠標左鍵/中鍵/右鍵,終端都會輸出一些值,這就說明 event2  文件就是對應(yīng)著我的鼠標。如果操作鼠標沒有反應(yīng),說明這個就不是。你可以通過這種方法找到你的鼠標對應(yīng)的 event 文件。

2. Linux 下獲取按鍵響應(yīng)

在 Linux 內(nèi)核中,input 設(shè)備用 input_dev 結(jié)構(gòu)體描述,使用 input  子系統(tǒng)實現(xiàn)輸入設(shè)備驅(qū)動的時候,驅(qū)動的核心工作就是向系統(tǒng)報告按鍵、觸摸屏、鍵盤、鼠標等輸入事件(event,通過 input_event  結(jié)構(gòu)體描述),不再需要關(guān)心文件操作接口,因為 input 子系統(tǒng)已經(jīng)完成了文件操作接口 Linux/input.h 這個文件定義了 event  事件的結(jié)構(gòu)體,API 和標準按鍵的編碼等。

// 結(jié)構(gòu)體定義見 input.h struct input_event {     struct timeval time; // 按鍵時間     __u16 type;          // 事件類型     __u16 code;          // 要模擬成什么按鍵     __s32 value;         // 是按下還是釋放 };  // 下面宏定義見 input-event-coses.h // type #define EV_KEY 0x01 #define EV_REL 0x02 #define EV_ABS 0x03 // ...  // code #define BTN_LEFT 0x110 #define BTN_RIGHT 0x111 #define BTN_MIDDLE 0x112 // ...  // value #define MSC_SERIAL 0x00 #define MSC_PULSELED 0x01 // ...

這里稍微介紹一下  type,指事件類型,常見的事件類型有:EV_KEY,按鍵事件,如鍵盤的按鍵(按下哪個鍵),鼠標的左鍵右鍵(是否擊下)等;EV_REL,相對坐標,主要是指鼠標的移動事件(相對位移);EV_ABS,  絕對坐標,主要指觸摸屏的移動事件 。

3. 編寫 C 程序

下面就可以編寫程序來檢測鼠標的動態(tài)了。首先在你的用戶~目錄下建立文件夾 Translator。在 Translator 里建立一個 ct.c  源文件,代碼如下:

#include  #include  #include  #include  #include   int main(void) {     int keys_fd;     struct input_event t;      // 注意這里打開的文件根據(jù)你自己的設(shè)備情況作相應(yīng)的改變     keys_fd = open("/dev/input/event2", O_RDONLY);     if (keys_fd <= 0)     {         printf("open /dev/input/event2 error!\n");         return -1;     }      while (1)     {         read(keys_fd, &t, sizeof(t));         if (t.type == EV_KEY)              // 有鍵按下             if (t.code == BTN_LEFT)        // 鼠標左鍵                 if (t.value == MSC_SERIAL) // 松開                     // 調(diào)用外部shell腳本                     system("~/Translator/goTranslate.sh");     }     close(keys_fd);     return 0; }

然后就是調(diào)用 gcc 編譯器生成可執(zhí)行文件 ct :

$ gcc ct.c -o ct

4. 編寫 shell 腳本翻譯剪切板內(nèi)容

在 Translator 里建立 goTranslate.sh 文件,內(nèi)容如下:

#!/bin/bash  str_old=$(cat ~/Translator/lastContent) str_new=$(xclip -o 2>/dev/null | xargs) if [[ "$str_new" != "$str_old" && $str_new ]]; then     echo -e "\n"     count=$(echo "$str_new" | wc -w)     if [ "$count" == "1" ]; then         echo -n -e "$str_new " >>~/Translator/words         echo "$str_new" | trans :zh-CN | tail -1 | cut -c 5- | sed "s,\x1b\[[0-9;]*[a-zA-Z],,g" | tee -a ~/Translator/words     else         echo "$str_new" | trans :zh-CN -b     fi     echo "$str_new" >~/Translator/lastContent fi

原理非常簡單,讀者自行了解。這里我們還要在 Translator 里建立一個 lastContent.txt  文件作為緩存,目的是本次調(diào)用腳本時能夠獲取上一次調(diào)用時翻譯的文本內(nèi)容,如果和本次調(diào)用的翻譯文本一樣,則本次就不進行翻譯。

設(shè)置 ct 別名

這里已經(jīng)可以通過下面的命令運行程序了:

$ sudo ~/Translator/ct

但是由于每次運行都要輸出這么長的命令,因此我們在 ~/.bashrc 文件中加入下面一條命令。

alias ct='sudo ~/Translator/ct'

這樣,以后每次看英文文獻時就可以在命令行下輸入:

$ ct

關(guān)于“Linux平臺如何實現(xiàn)劃詞翻譯工具”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


新聞名稱:Linux平臺如何實現(xiàn)劃詞翻譯工具
文章鏈接:http://weahome.cn/article/pcicss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部