python取詞
『壹』 將有道單詞本導出到墨墨自建詞庫記憶,只背那些私人訂制的單詞
有道詞典 的屏幕取詞比較方便,詞庫和社區功能也比較全面,所以平時使用比較多。日常遇到的生單詞可以隨時放到有道自帶的單詞本中,收集記憶。雖然有道單詞本提供背單詞的功能,但是非常單一,沒有艾賓浩斯遺忘曲線,所以非常不適合用來復習單詞。
再說說 墨墨 (添加個 Link 以免有人想多)。墨墨是我用過的背單詞app中最推薦的一個。原因有以下:
1. 根據艾賓浩斯遺忘曲線給你需要復習的單詞;
2. 可以自己創建詞庫(在網頁中操作),不用按照托福、雅思、專四專八的詞庫去記很多你已經記住了的或者你平時基本遇不到的單詞;
3. 可以每日簽到,簽到的時候還會『Peng』一下,細致的給你成就感;
4. 你有必要每日簽到!一是因為如果連續幾天不簽到會累積很多你需要復習的單詞,二是自建詞庫的單詞數不是無限的,你需要通過簽到來掙,或者花錢買(雖然不貴但是掙不到數量靠買獲取是不是很傷自尊);
5. 此外,每天至少記憶單詞數累積到10個你才能簽到;
6. 例句和助記非常豐富,而且你可以自己創建自己喜歡的助記方式;
7. 例句或助記中的生單詞可以直接添加到記憶清單中;
8. app內部鏈接五大在線詞典;
9. 可以查看自己記憶單詞的很多統計指標和未來復習單詞數的預測;
10. 暫時就想到這些了。
那麼,問題來了。一個是平時使用和收集生單詞的有道詞典,一個是可以方便記憶和復習自建詞庫的墨墨背單詞, 怎麼快速有效的把有道詞典單詞本收集的生單詞導入到自己創建的墨墨詞庫中?
在這里,我肯定不會允許你耗時費力地一個一個復制!而如果把有道單詞本導出來再放入墨墨詞庫,你會發現導出的單詞本包括序號,音標,詞性標識和漢語意思等,把這些全部直接復制到自建詞庫中將會引起很大的麻煩(試試你就知道了)。我的solution是這樣的:
1. 從有道詞典單詞本中導出你想加入記憶的單詞到一個.txt文件;
2. 把.txt文件的編碼改為 utf-8 (直接另存為,有選項);
3. 使用本文後面的附加的python程序可以提取出你需要記憶的單詞;
4. 程序將會生成一個.txt文件,打開之後會發現裡面只剩英語單詞了,將他們復制到你的墨墨自建詞庫中,記下詞庫編號;
5. 用墨墨記憶單詞的時候通過詞庫編號鏈接到你的詞庫,你就可以開始學習你的私人訂制的詞庫了。
此程序完成將text文件中這樣的記錄:
轉化為這樣的詞條:
程序是用 python 寫的,我不常做文本處理,本程序只為滿足簡單的基礎需要,所以應該有很多可以改進的地方(歡迎分享你的更好的方案)。你只需要用自己的有道詞典導出的utf-8編碼的記事本文件路徑和名稱替換第19行的 E:voc.txt
『貳』 python可以調用金山詞霸屏幕取詞嗎
Imports XDICTGRB '引用命名空間
Public Class Form1
Implements IXDictGrabSink '繼承 '引用DLL中的方法
'定義一個類
Public gp As GrabProxy 'DLL中的屬性
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'創建一個新實例
gp = New GrabProxy
'在gp 裡面設置一些相關屬性
gp.GrabInterval = 1000 『設置取詞時間間隔為1秒
gp.GrabMode = 1 『設置取詞方式為滑鼠取詞
gp.GrabEnabled = True 『設置取詞功能有效
'設置屬性後,把介面指向自身
dwCookie = gp.AdviseGrab(Me)
『叄』 google翻譯懸浮窗(含google翻譯python api)
閱讀英文資料經常需要翻譯。google翻譯的結果個人比較滿意,但google翻譯只能用網頁版查詢,不能像有道詞典一樣滑屏取詞。故自己開發了一個google翻譯的懸浮窗小工具。 利用google翻譯做的一個翻譯窗口(默認置頂),自動監視粘貼板。當粘貼板發生變化時,自動翻譯粘貼板內容。默認自動檢測語言,翻譯至中文。其他語言可自行向translate方法傳遞參數 https://github.com/MrCloudPeak/translation_window 其中translate_api.py文件包含python實現的google翻譯api,可設置語言,可單獨調用 然後會彈出一個translation窗口,自動監視粘貼板。當粘貼板發生變化時,自動翻譯粘貼板內容。 要關閉程序,直接關閉終端即可『肆』 python軟體中的菜單都是英文的,怎樣漢化,求詳細漢化過程
你說的是idle吧。。。你根本就不需要漢化它,把精力放在記牢如何使用它更好。也謝菜單基本上用不到。。。比如最常用的ctrl+s為保存,F5是運行程序。這兩個是最長用的。要新建文檔,單擊file(文件),然後選擇new file(新建文件),或者open(打開)
指導這些就夠了。。。。最常用的就這些。其它功能幾乎不會去用
『伍』 請教關於用python編寫屏幕取詞的程序問題
1、屏幕取詞技術實現原理與關鍵源碼----
Ubuntu 下可以監視 gtk.Clipboard 來獲取當前選中文字和位置。
我以前嘗試過定時抓取滑鼠附近圖像做 OCR 來取詞,
改成快捷鍵取詞會省一點。
直接獲得文字的懸停取詞比較麻煩。
網頁、XUL 應用程序可以有滑鼠懸停事件。
X11 自己沒有, 不過以前流行中文平台、中文外掛時候 Turbolinux 的中文 X-window 被修改為集成滑鼠懸停取詞翻譯。
Gtk 程序也許你可以在 ATK 層入手,自己改 ATK 和用 LD_LIBRARY_PATH。
windows下很不好做。
普遍用的是HOOK API的方法。
可以參考stardict的取詞模塊。
不過我感覺stardict的取詞模塊也不是太好用(沒金山詞霸的好用),感覺有bug。
似乎以前某版本的金山詞霸可以翻譯圖片中的文字,就是用 OCR
再,金山似乎出過 Linux Qt3 版本,找 Zoomq 幾位在金山的老大索取源碼看看吧
嗯, 金山詞霸確實出過 Linux 版本,
是基於 wine 的,不是原生的 Linux 版本...
linux下就不知道,windows下,應該是做一個api hook,鉤住TextOut,DrawText和DrawTextEx。
要取詞的時候給滑鼠所在的窗口發一個WM_PAINT消息,讓窗口重繪。
當窗口調用TextOut, DrawText或是DrawTextEx進行重繪的時候,你就可以根據傳入的參數知道
窗口想在滑鼠下畫什麼東西了。
『陸』 學編程的要求有哪些
俗話說,沒有金剛鑽,就別攬瓷器活兒。套用到
IT
業,英語不行,就別做程序員。網上關
於程序員學英語的文章不少,
但我想談談我自己的看法。
首先詳細討論一下為什麼程序員離
了英語不行,然後針對程序員應該怎麼學英語說說我的體會。
英語是計算機的母語,是程序的母語,所以必然是程序員的母語。
程序中的變數名、函數名
起得好不好是決定代碼質量和可維護性的最關鍵因素。
高質量的代碼應該是這樣的:
代碼基
本上是自解釋的(
self-explanatory
),不需要太多注釋,不管代碼的規模有多大,具有相
關知識背景的讀過文檔的人都可以立刻上手、
立刻參與維護和開發。
要想使代碼能夠自解釋,
給變數和函數起個好名字很關鍵,
很顯然,
只能用英文起名字,
一是用漢語拼音起名字可讀
性很差,二是英文單詞通常比漢語更
expressive
(看吧,如果用漢語來說,就得說「表達
能力更強」、「更有表現力」這么羅嗦)
,由於程序的復雜性,變數和函數往往表示一些很
抽象的概念,
起個既准確又簡潔的名字並不容易,
可是很多時候,
用漢語需要很多字才能說
清楚的一件事,用英文一個單詞再加點詞形變化就能說清楚了。例如
APUE
上講
sleep
函數
的實現,
其中有個變數表示「本來應該睡到某個時刻,
但是提前被信號喚醒了,
喚醒時與本
來應該睡到的時刻相差的時間」,
如果為了簡潔而不求准確,
這個變數名至少也得叫「未睡
到」,而書中只用了一個單詞
unslept
,非常准確、簡潔地表達了這個意思。為了寫程序而
學英語需要學到什麼水平?我認為能起出這種變數名就夠水平了。很多在
IT
外企工作的中
國人,說話寫文章經常夾雜著英文單詞(比我嚴重多了因為我不在外企),非常可以理解,
確實是為了表達得更准確簡潔的需要,而不是純為了
play
zhuangbility
。總之,要寫程序
必須學好英語,
否則連變數名都起不好,
這雖然是一個非技術問題,但卻是個根本問題,比
任何技術問題都重要。當然,現在很多編程語言也支持用
Unicode
字元給變數和函數起名,
但是你見過有人用漢字寫程序嗎?根本不實用。
有人會辯駁說一頁英文翻譯成中文往往只佔
半頁,中文不是更簡潔嗎?但是你算算打一頁英文和打半頁中文哪個敲鍵盤次數多。另外,
要讀別人的代碼也必須學好英語,如果你不知道
unslept
是由
sleep
變形而來的,就體會
不到其中的精妙,
只有大量閱讀高質量的代碼,
才能寫出高質量的代碼,
創作都是從模仿開
始的。
說說英語對於看書學習的重要性。
中文技術書和英文技術書的水平根本不在一個量級上,
這
是有很多原因的,
不能全歸結於中文書的作者水平差。
最重要的是,
出中文書的低回報率決
定了作者不可能花太多心血在上面,你去
amazon
看看一本書賣多少美刀,再去
chinapub
看看一本書賣幾塊錢。
老外寫一本書,
可以做到全書沒有一個拼寫錯誤
(當然英文的拼寫檢
查工具更完善也是部分原因),中文能找出一本沒有錯別字的書嗎?
Knuth
可以懸賞讓全世
界讀者來找磋,
中文書作者有哪個敢這么做?不是因為老外態度有多認真治學有多嚴謹,
而
是因為他們賺到了,就應該拿出高質量的作品來,不然會被讀者罵的。
英文技術書的翻譯質量通常很差。
也不能歸結於譯者的水平差,
我也翻譯過書,
也努力想譯
好,但真的很難譯好。
IT
業的新名詞層出不窮,像「內核」、「網路」這種常見術語還好,
稍微專一點的術語都沒有統一的譯名。
我們在教學中發現,
很多學員看書時搞不清這本書的
名詞
A
和那本書的名詞
B
是什麼區別,
來問老師,
才發現原來
A
和
B
就是一回事兒。
這是一
個單詞對應多個譯名的情況,
還有一個譯名對應多個單詞的情況,
比如
field
、
domain
、
realm
都譯成「域」,
block
、
bulk
都譯成「塊」,
argument
、
parameter
都譯成「參數」,
attribute
、
property
都譯成「屬性」,雖然這些詞的意思本來就差不多,但是在一篇文章
里,作者可以換著用,不同的單詞表示不同的概念,翻譯完了一看,都成一個概念了。英文
書背後都有
index
,看到一半忘了某個名詞是怎麼定義的就可以翻
index
,而譯文通常沒有
index
,名詞都已經亂七八糟了,沒法做
index
。還有更發指的是,老外喜歡造詞,現有的
單詞上加一點變化和組合(例如有人喜歡說
automagically
),看著心領神會,想譯出來就
很費勁。
老外即使在技術書中也經常用一些生動的表達方式和俏皮話,
而中文的書面語言非
常死板,
生動的表達方式只存在於口語中,
如果寫在書上就很不像話,
這也是很難翻譯的一
個重要原因。看中文譯本,不僅質量差,而且跟不上時代,通常一本英文書出來,至少要等
一到兩年才能看到中文譯本。
兩年啊!
等你看到這本書的中文譯本時,
這個版本都快淘汰了。
然後說說英語在開發工作中的重要性。
看書學習通常只起一個引導入門的作用,
在工作中更
有用的是手冊、文檔。學完了
C
語言開始寫程序了,誰還會去查
K&R
附錄中的庫函數?查
man page
才是最有效率的。然而手冊比入門書更少有中文譯版,因為手冊是隨時變的,會
隨著軟體版本更新,
而且需要看這些開發手冊的人通常不會有英文障礙,
有英文障礙的人即
使看了翻譯的手冊也寫不出好程序來,
所以當然沒必要翻譯了。
不管什麼技術,
官方的手冊
和技術標准才是最原始的第一手資料,
看別的書都是以訛傳訛,
由於自然語言不可避免是有
歧義的,
文檔中表達得不準確的地方就會被文檔的讀者也就是技術書的作者誤解,
技術書中
再有表達不準確的地方又被譯者誤解。
我們小時候都玩過傳話的游戲,
幾個人站一排,
通過
悄悄話傳一句話,傳到最後變成什麼了?所以,學網路協議,就得看
RFC
,學
ARM
,就得看
ARM
公司的
Architecture Reference Manual
,要學習
C
語言就得看
C99
,有歧義不要緊,
自己去揣測原作者的意思,總比道聽途說的可靠。
我們的學員出去面試經常被問到的一個問題就是:
在開發工作中遇到問題,
書和文檔上都沒
有答案,網上搜一下也沒有答案,怎麼辦?要我說,能看懂源代碼的就去源代碼中找答案,
這稱為
hacking
,不管是內核、
libc
還是各種
framework
,你調用的東西有問題都能從它的
代碼中找到原因。如果沒有能力
hacking
,或者時間緊不想去
hacking
,最好的辦法就是去
官方郵件列表和
IRC
問。
如果英文不行就沒辦法了,
只能去一些中文論壇:
「各位大蝦幫忙,
小弟有一個問題求救!
跪求!
!
在線等!
!
!
」在線等了好幾天也無人問津,
或者答非所問。
豈不知逛這些論壇的沒有大蝦,都是菜鳥,大蝦們都在
IRC
上聊得正歡呢。我在做
Qt
開發
時曾經有一個問題,
當時在教育網,
上國外網不方便,
去各大中文論壇問了好幾天也沒人給
出滿意的回答,後來花錢連了國外網,去
trolltech
官方新聞組提問,只等了幾分鍾就得
到了滿意的解決辦法。這次經歷給我留下了深刻印象,從此以後再也沒有去中文論壇。
那麼,
如果現在英文水平很差,
又想做程序員,
應該怎麼學英語呢?我下面說的方法有兩個
前提,
一是你的英文至少達到高中畢業水平,
也就是語法基本都學完了,
即使用得不熟練也
知道有那麼回事兒,二是你希望盡快在工作中用上英語,寫程序夠用就行,而不是有考
T
考
G
這樣的更高要求。
學習英語有聽說讀寫四個方面的要求,
做程序員至少需要讀和寫非常流暢,
如果在外企工作
還需要聽和說的能力。技術英語和考
T
考
G
是不一樣的,一是聽和說不像讀和寫那麼重要,
不必擔心自己是「聾啞英語」,
沒關系,
絲毫不影響你成為編程高手,
二是要求的詞彙量要
小得多。
考
T
考
G
都要拿一本單詞書背,
很少有人會覺得背單詞很有意思,
至少我是覺得很
痛苦,
幸運的是看技術書不需要多少詞彙量。
技術書的描述對象都是局限於一個很窄的領域
的,
就那麼幾個單詞翻來覆去地用,
而且技術書是為了讓人看懂的
(不像詩是為了讓人看不
懂的)
,比較復雜的詞在書中都有定義或解釋。有些作者喜歡賣弄詞彙量,
用一些很生僻的
單詞,也有些作者賣弄一些典故,由於文化背景不同很難理解,不過這些通常都可以無視,
不會影響閱讀,
還是因為技術書是為了讓人看懂的。
對於學習者來說,
閱讀能力是最重要的,
等你完成了學習,成為一個合格的開發者時,
需要寫代碼注釋,需要寫文檔,需要通過郵件
交流,寫作的能力才開始重要了。所以應該首先從閱讀開始練習英語。
現在就拿起一本英文原版書開始看吧。
和學游泳一樣,
閱讀的能力只能通過閱讀本身來練習。
我的經驗是,
不必先系統學習了單詞和語法再看書,
可以在看書時用到什麼就補什麼。
我建
議初學者看電子版,
因為現在的詞典軟體都可以滑鼠取詞,
邊看邊查很方便,
很多勤快人喜
歡把查過的單詞都抄下來,我覺得沒有必要,
反正查字典很方便,
下次再看到了就再查,多
查幾次總會記住的,
抄下來就打斷了看書的思路,
而且不見得抄下來就能記住。
也許是因為
我這人比較懶,
我用的都是懶辦法。
很多人不喜歡看電子書,
理由是盯著屏幕看書太累,那
么盯著屏幕寫程序累不累?這種人顯然不適合做程序員。
語法不熟練怎麼辦?大多數情況下
單詞的意思都明白了就不影響閱讀。
技術書有時候喜歡用長句,
其中可能包含各種從句,
如
果實在讀不懂就去查語法書,
同樣也不需要把這種從句徹底弄明白,
只要這一句能看過去就
行了,以後多查幾遍書,自然就掌握了。另外,技術書是說明文,通常不應該有過去時,看
到過去時就需要注意了,
很可能是虛擬語氣,
如果不注意這一點,
看到的意思可能和真實的
意思正好相反。
應該從哪本書開始看起呢?從你當前最需要學的技術書看起。
看書是相當花時間的,
如果能
一邊學英語一邊學技術,
這時間利用得就很有效率。
比如,
如果你的
C
語言已經學得相當好
了,不要專門為了學英語去重看一遍原版的
K&R
。市面上有一些專門的計算機英語教材,我
的建議是不要看,浪費時間,
nonsense
。
初學時最好選一本有中文譯本的書,有看不懂的地
方可以翻中文版來對照,
但是不要相信中文的翻譯,
原因在前面討論過了。
如果你是初學編
程,沒有任何基礎,我可以推薦一本英文很淺顯技術也很淺顯的書:
How To Think Like a
Computer Scientist
,有
Python
、
Java
和
C++
版本,可自由下載。
要逐漸養成良好的閱讀習慣。
一是不要每個生單詞都去查,
有些單詞很生僻,
查了也記不住,
記住了也不會再見到它了,
但是前面講過,
都是作者在賣弄詞彙量,
無視它絲毫不影響閱讀,
因此要學會猜測單詞的意思,能不查就不查,繼續貫徹「懶」的原則。二是看書不要動口,
不念出聲也不行,
就是不要動口,
要努力在大腦中建立從詞形到語義的直接映射,
如果只能
從詞形到讀音再到語義就太慢了,
嚴重影響閱讀速度。
三是努力做到每句話都從頭到尾只看
一遍,
不許回頭反復看,
這一點比較難,
必須注意力高度集中,經常在記憶中暫存前面半句
的內容和句式才能做到,
但是一旦神功練成就會成倍地提高閱讀速度。
最後一層境界,
學會
skim
,
就是略讀,
很多優秀的作者在組織材料時會給讀者一些建議,
比如這一段是擴展的高
級話題,和主線的相關度較低,
可以先
skim
到後面,注意不是讓你
skip
到後面,這一段還
是要讀的,
但是不必逐字句地讀,
而是抓主旨,
大概講了個什麼概念
(有一些下定義的句式)
,
有哪些要點
(有數字編號或
bullet
列表項)
,
適用於哪些場合有哪些注意事項
(有
caveat
、
gotcha
、
noteworthy
這種字眼),後面可能還會碰到這個概念,雖然你沒有仔細看這是個
什麼東西,
但大體上也知道了,
這樣就能不影響後面的閱讀,
這不僅需要高度集中的注意力、
熟練的語言能力,
而且要有足夠的背景知識去猜測性地理解。
但是語言能力還是最重要的因
素,我和幾個同學交流過,他們也能熟練地看英文書,但是需要
skim
查一個東西時就覺得
還是不如中文書查得快。
skim
的技能在查閱手冊時尤其重要,沒有人會像看入門書一樣把
上千頁的手冊從頭到尾看一遍,
都是用到哪兒就查哪兒。
總之,
鍛煉各種閱讀習慣就為了一
個目的:如何在最短的時間內,
在保證正確性的前提下,
獲取盡可能多的知識。程序員的學
習時間都是非常寶貴的。
以上本著「夠用就好」的原則,
多次提到用懶辦法,
但是學技術學英語這兩件事不能懶,
貴
在堅持。
要養成良好的閱讀習慣也有很多東西需要堅持,
其中最根本的是持續高度集中注意
力,充分調動記憶能力、推理能力、猜測能力,就像考試做閱讀題一樣看每一段話。最根本
也是最重要的,
「有英文原版就不看中文版」這個原則一定要堅持。
一開始看英文書可能會
很慢,
但只要一直堅持就會慢慢達到原來看中文書的速度,
再堅持下去就會比中文書看得更
有效率,因為避免了很多歧義和術語翻譯的問題。
有人會說,
項目緊任務急,看英文資料太
慢,
這次就先用中文盡快解決工作中的問題吧,
等以後有時間了再看英文書學習。
可是什麼
時候才會有時間呢?工作總是一個接一個的,
老闆怎麼會付了工資讓你閑著呢?如果你有這
樣的困難,
我的建議是乾脆辭職,學好了英文再去工作。
你只要想想,
你的同行們在外企全
英文的環境下工作,
英文和技術每天都在突飛猛進,
而你還在用效率極其低下的方式學習和
工作,
你和別人的差距不是越來越大了嗎?另一方面,
現在的在校學生從小學就開始抓英語,
基礎都很好,
很多高校也逐漸重視引進原版教材,
開設很多英文授課的專業課。
你再不奮起
直追,就不覺得以後的職業道路充滿危機嗎?
最後說說寫作。
剛開始練習時不要怕寫錯,
能表達清楚自己的意思即可。
我看過很多源代碼
和文檔中的英文,一看就是中國人寫的,謂語動詞不分單復數,名詞復數不加
s
,處處可見
中國式英語,
但是絲毫不影響我對這些編程大牛的景仰,
因為其中的思想我看懂了,
並且我
認為很強大。我有一個朋友,中學畢業就出來混的,由於工作的性質總要跟老外打交道,他
從來不懼和老外交流,
雖然連一個囫圇的句子都說不出來,
但總是能用中學學的那點單詞讓
老外明白他的意思,
這一點我就非常佩服。
總之就是說,
不要因為不知道怎麼寫是對的就不
敢動筆寫,
只要敢交流,
並且別人能懂你的意思,
就是很有效的交流。
而且隨著閱讀量的增
加,自然能寫出一手好英文,前面講過了,創作總是從模仿開始的。不怕出錯才能有一個好
的開始,
才能逐步練習提高,
而練習的最終目的當然還是希望寫好,
不僅字句通順無語法錯
誤,還能適當修辭。
『柒』 學編程是不是一定要英語很好
不一定。學編程的人最根本的還是要數學底子好,所有的演算法都是靠嚴密的思維邏輯才能夠行得通的。編程語言要寫大量源代碼,其實只要是認得26個字母的人都可以編程。
但是畢竟程序這個東西是西方那裡過來的,我們現在編程的代碼都是英文字母。先進的計算機編程技術也都是西方那裡學過來的,一些大型的計算商用程序大多數被西方壟斷。如果要想在編程上有所進展,學習英語對拓展視野大有用處。
國內也有編程不用英文字母寫源代碼的,比如說易語言,所以學習編程外語不一定要很好,將來中國強大了,源代碼用中文寫,不也是很好嘛!我們的雷軍,英語雖然不是很好,但編程可也是一流的,這正說明了學編程不一定要英語很好。
『捌』 Python中,已經得到一個包含所有單詞的詞典,如何統計詞典中的單詞在每一句話中出現的次數
眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用中文則為:「我是一個學生」。計算機可以很簡單通過空格知道student是一個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個 學生。
中文分詞技術屬於自然語言處理技術范疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法。
現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
1、基於字元串匹配的分詞方法
這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行配,若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。常用的幾種機械分詞方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的詞數最小)。
還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各種其它的語言信息來進一步提高切分的准確率。
一種方法是改進掃描方式,稱為特徵掃描或標志切分,優先在待分析字元串中識別和切分出一些帶有明顯特徵的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的准確率。
對於機械分詞方法,可以建立一個一般的模型,在這方面有專業的學術論文,這里不做詳細論述。
2、基於理解的分詞方法
這種分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。
3、基於統計的分詞方法
從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字X、Y的相鄰共現概率。互現信息體現了漢字之間結合關系的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成了一個詞。這種方法只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法也有一定的局限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。
到底哪種分詞演算法的准確度更高,目前並無定論。對於任何一個成熟的分詞系統來說,不可能單獨依靠某一種演算法來實現,都需要綜合不同的演算法。筆者了解,海量科技的分詞演算法就採用「復方分詞法」,所謂復方,相當於用中葯中的復方概念,即用不同的葯才綜合起來去醫治疾病,同樣,對於中文詞的識別,需要多種演算法來處理不同的問題。
『玖』 如何對excel表格里的詞結巴分詞python
#-*-coding:utf-8-*-
importjieba
'''''
Createdon2015-11-23
'''
defword_split(text):
"""
Splitatextinwords.
(word,location).
"""
word_list=[]
windex=0
word_primitive=jieba.cut(text,cut_all=True)
forwordinword_primitive:
iflen(word)>0:
word_list.append((windex,word))
windex+=1
returnword_list
definverted_index(text):
"""
CreateanInverted-.
{word:[locations]}
"""
inverted={}
forindex,wordinword_split(text):
locations=inverted.setdefault(word,[])
locations.append(index)
returninverted
definverted_index_add(inverted,doc_id,doc_index):
"""
AddInvertd-Indexdoc_indexofthedocumentdoc_idtothe
Multi-DocumentInverted-Index(inverted),
usingdoc_idasdocumentidentifier.
{word:{doc_id:[locations]}}
"""
forword,locationsindoc_index.iteritems():
indices=inverted.setdefault(word,{})
indices[doc_id]=locations
returninverted
defsearch_a_word(inverted,word):
"""
searchoneword
"""
word=word.decode('utf-8')
ifwordnotininverted:
returnNone
else:
word_index=inverted[word]
returnword_index
defsearch_words(inverted,wordList):
"""
searchmorethanoneword
"""
wordDic=[]
docRight=[]
forwordinwordList:
ifisinstance(word,str):
word=word.decode('utf-8')
ifwordnotininverted:
returnNone
else:
element=inverted[word].keys()
element.sort()
wordDic.append(element)
numbers=len(wordDic)
inerIndex=[0foriinrange(numbers)]
docIndex=[wordDic[i][0]foriinrange(numbers)]
flag=True
whileflag:
ifmin(docIndex)==max(docIndex):
docRight.append(min(docIndex))
inerIndex=[inerIndex[i]+1foriinrange(numbers)]
foriinrange(numbers):
ifinerIndex[i]>=len(wordDic[i]):
flag=False
returndocRight
docIndex=[wordDic[i][inerIndex[i]]foriinrange(numbers)]
else:
minIndex=min(docIndex)
minPosition=docIndex.index(minIndex)
inerIndex[minPosition]+=1
ifinerIndex[minPosition]>=len(wordDic[minPosition]):
flag=False
returndocRight
docIndex=[wordDic[i][inerIndex[i]]foriinrange(numbers)]
defsearch_phrase(inverted,phrase):
"""
searchphrase
"""
docRight={}
temp=word_split(phrase)
wordList=[temp[i][1]foriinrange(len(temp))]
docPossible=search_words(inverted,wordList)
fordocindocPossible:
wordIndex=[]
indexRight=[]
forwordinwordList:
wordIndex.append(inverted[word][doc])
numbers=len(wordList)
inerIndex=[0foriinrange(numbers)]
words=[wordIndex[i][0]foriinrange(numbers)]
flag=True
whileflag:
ifwords[-1]-words[0]==numbers-1:
indexRight.append(words[0])
inerIndex=[inerIndex[i]+1foriinrange(numbers)]
foriinrange(numbers):
ifinerIndex[i]>=len(wordIndex[i]):
flag=False
docRight[doc]=indexRight
break
ifflag:
words=[wordIndex[i][inerIndex[i]]foriinrange(numbers)]
else:
minIndex=min(words)
minPosition=words.index(minIndex)
inerIndex[minPosition]+=1
ifinerIndex[minPosition]>=len(wordIndex[minPosition]):
flag=False
break
ifflag:
words=[wordIndex[i][inerIndex[i]]foriinrange(numbers)]
returndocRight
if__name__=='__main__':
doc1="""
中文分詞指的是將一個漢字序列切分成一個一個單獨的詞。分詞就是將連續的字序列按照一定的規范
重新組合成詞序列的過程。我們知道,在英文的行文中,單詞之間是以空格作為自然分界符的,而中文
只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符,雖然英文也同樣
存在短語的劃分問題,不過在詞這一層上,中文比之英文要復雜的多、困難的多。
"""
doc2="""
存在中文分詞技術,是由於中文在基本文法上有其特殊性,具體表現在:
與英文為代表的拉丁語系語言相比,英文以空格作為天然的分隔符,而中文由於繼承自古代漢語的傳統,
詞語之間沒有分隔。古代漢語中除了連綿詞和人名地名等,詞通常就是單個漢字,所以當時沒有分詞
書寫的必要。而現代漢語中雙字或多字詞居多,一個字不再等同於一個詞。
在中文裡,「詞」和「片語」邊界模糊
現代漢語的基本表達單元雖然為「詞」,且以雙字或者多字詞居多,但由於人們認識水平的不同,對詞和
短語的邊界很難去區分。
例如:「對隨地吐痰者給予處罰」,「隨地吐痰者」本身是一個詞還是一個短語,不同的人會有不同的標准,
同樣的「海上」「酒廠」等等,即使是同一個人也可能做出不同判斷,如果漢語真的要分詞書寫,必然會出現
混亂,難度很大。
中文分詞的方法其實不局限於中文應用,也被應用到英文處理,如手寫識別,單詞之間的空格就不很清楚,
中文分詞方法可以幫助判別英文單詞的邊界。
"""
doc3="""
作用
中文分詞是文本挖掘的基礎,對於輸入的一段中文,成功的進行中文分詞,可以達到電腦自動識別語句含義的效果。
中文分詞技術屬於自然語言處理技術范疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,
但如何讓計算機也能理解?其處理過程就是分詞演算法。
影響
中文分詞對於搜索引擎來說,最重要的並不是找到所有結果,因為在上百億的網頁中找到所有結果沒有太多的意義,
沒有人能看得完,最重要的是把最相關的結果排在最前面,這也稱為相關度排序。中文分詞的准確與否,常常直接
影響到對搜索結果的相關度排序。從定性分析來說,搜索引擎的分詞演算法不同,詞庫的不同都會影響頁面的返回結果
"""
doc4="""
這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行配,
若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向
匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;常用的幾種
機械分詞方法如下:
正向最大匹配法(由左到右的方向);
逆向最大匹配法(由右到左的方向);
最少切分(使每一句中切出的詞數最小);
雙向最大匹配法(進行由左到右、由右到左兩次掃描)
還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。
由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於
正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為,單純使用逆向
最大匹配的錯誤率為。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞
作為一種初分手段,還需通過利用各種其它的語言信息來進一步提高切分的准確率。
一種方法是改進掃描方式,稱為特徵掃描或標志切分,優先在待分析字元串中識別和切分出一些帶有明顯特徵
的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法
是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞
結果進行檢驗、調整,從而極大地提高切分的准確率。
對於機械分詞方法,可以建立一個一般的模型,在這方面有專業的學術論文,這里不做詳細論述。
"""
doc5="""
從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。
因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度
進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字的相鄰共現概率。互現信息體現了
漢字之間結合關系的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成了一個詞。這種方法
只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法
也有一定的局限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、
「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本
的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,
既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。
另外一類是基於統計機器學習的方法。首先給出大量已經分詞的文本,利用統計機器學習模型學習詞語切分的規律
(稱為訓練),從而實現對未知文本的切分。我們知道,漢語中各個字單獨作詞語的能力是不同的,此外有的字常
常作為前綴出現,有的字卻常常作為後綴(「者」「性」),結合兩個字相臨時是否成詞的信息,這樣就得到了許多
與分詞有關的知識。這種方法就是充分利用漢語組詞的規律來分詞。這種方法的最大缺點是需要有大量預先分好詞
的語料作支撐,而且訓練過程中時空開銷極大。
到底哪種分詞演算法的准確度更高,目前並無定論。對於任何一個成熟的分詞系統來說,不可能單獨依靠某一種演算法
來實現,都需要綜合不同的演算法。例如,海量科技的分詞演算法就採用「復方分詞法」,所謂復方,就是像中西醫結合
般綜合運用機械方法和知識方法。對於成熟的中文分詞系統,需要多種演算法綜合處理問題。
"""
#BuildInverted-Indexfordocuments
inverted={}
documents={'doc1':doc1,'doc2':doc2,'doc3':doc3,'doc4':doc4,'doc5':doc5}
fordoc_id,textindocuments.iteritems():
doc_index=inverted_index(text)
inverted_index_add(inverted,doc_id,doc_index)
#Searchoneword
aWord="分詞"
result_a_word=search_a_word(inverted,aWord)
ifresult_a_word:
result_a_word_docs=result_a_word.keys()
print"'%s'isappearedat"%(aWord)
forresult_a_word_docinresult_a_word_docs:
result_a_word_index=result_a_word[result_a_word_doc]
forindexinresult_a_word_index:
print(str(index)+''),
print"of"+result_a_word_doc
print""
else:
print"Nomatches! "
#Searchmorethanoneword
words=["漢語","切分"]
result_words=search_words(inverted,words)
ifresult_words:
print("["),
foriinrange(len(words)):
print("%s"%(words[i])),
print("]areappearedatthe"),
forresult_words_docinresult_words:
print(result_words_doc+''),
print" "
else:
print"Nomatches! "
#Searchphrase
phrase="中文分詞"
result_phrase=search_phrase(inverted,phrase)
ifresult_phrase:
result_phrase_docs=result_phrase.keys()
print"'%s'isappearedatthe"%(phrase)
forresult_phrase_docinresult_phrase_docs:
result_phrase_index=result_phrase[result_phrase_doc]
forindexinresult_phrase_index:
print(str(index)+''),
print"of"+result_phrase_doc
print""
else:
print"Nomatches! "
『拾』 有道的翻譯api可以直接用jquery呼叫嗎
有道的翻譯api可以直接用jquery呼叫嗎?
不能,因為對方沒有提供JSONP 借口,有道只提供網站訪問的API。
PPt上可以直接用有道翻譯嗎
可以的 你可以選擇裡面的那個圖片取詞
在有道查單詞的框框右下角有個螢幕取詞,點一下,若是綠色,則當你點選桌面上任何字母是都會有英文出現,若不想要,再點一下,成紅色就好了。
網頁連結
國外問卷翻譯過來可以直接用嗎?
翻譯稿至少過濾一下。。。。 有些問題或者備選答案都可能是國外專有的。。。需要做變更~~~
python可以直接呼叫win32的api嗎
①沒有內建所以不能直接呼叫
②需要下載安裝pywin32-219.win32-py2.7.exe(選擇合適的win32下載)
可以試試用 ctypes 嘛, py2.5之後就有了,例如,想要獲得當期時間:
from ctypes import Structure, windll, POINTER, pointer
from ctypes.wintypes import WORD
class SYSTEMTIME(Structure):
_fields_ = [("wYear", WORD),
("wMonth", WORD),
("wDayOfWeek", WORD),
("wDay", WORD),
("wHour", WORD),
("wMinute", WORD),
("wSecond", WORD),
("wMilliseconds", WORD),
]
def printlocaltime():
# decl
GetLocalTime = windll.kernel32.GetLocalTime
GetLocalTime.argtypes = [POINTER(SYSTEMTIME),]
# invoke
t = SYSTEMTIME()
GetLocalTime(pointer(t))
print "%04d-%02d-%02d %02d:%02d:%02d" % (t.wYear, t.wMonth, t.wDay,
t.wHour, t.wMinute, t.wSecond)
printlocaltime()
可以的,python支援直接呼叫win32的api 呼叫的步驟如下: 先匯入ctypes模組: import ctypes 獲取ctypes模組下具體模組:比如ctypes.windll 最後,獲取具體的函式api 下面以呼叫win32蜂鳴器api為例: import ctypes player = ctypes.windll.kernel32 player.Beep(1000,200)
微軟在windows開放了win32的API。python可以通過pywin32的介面直接調 用。
比如抓視窗,向視窗發訊息,控制視窗大小等等都可以做到。也可以直接使用API進行程式設計。
建議你找一本win32api的教程。裡面的大部分功能都可以通過python使用。
要先安裝win32的庫,在程式碼開頭import 後,就能使用win32的api了
document.onmouseup = function () {
document.onmouseup = null;
document.onmousemove = null;
可以的,很好用。
python屬於指令碼語言,跑在VM上的,是不能直接呼叫win32 API的。
但是你可以使用C/C++ 包裝起來API功能,提供給python呼叫。