自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

50行Python代碼寫一個(gè)語言檢測器

開發(fā) 后端
你有沒有曾經(jīng)好奇過Chrome瀏覽器是如何知道一個(gè)網(wǎng)頁的語言,并對(duì)外國文字的網(wǎng)頁提供翻譯服務(wù)的?或者,F(xiàn)acebook是如何翻譯你朋友用寫在你主頁上的外國文字?檢測一種語言實(shí)際上非常簡單,改進(jìn)了用戶體驗(yàn),而且不需要用戶做任何的事情。

你有沒有曾經(jīng)好奇過Chrome瀏覽器是如何知道一個(gè)網(wǎng)頁的語言,并對(duì)外國文字的網(wǎng)頁提供翻譯服務(wù)的?或者,F(xiàn)acebook是如何翻譯你朋友用寫在你主頁上的外國文字?檢測一種語言實(shí)際上非常簡單,改進(jìn)了用戶體驗(yàn),而且不需要用戶做任何的事情。

我無意中發(fā)現(xiàn)的 ActiveState recipe for a language detector in Python這是非常不錯(cuò)的一段程序,但是我決定做點(diǎn)小小的改進(jìn)。提供一些背景知識(shí)給那些不熟悉自然語言處理或者是程序語言學(xué)的人。

如果你是有經(jīng)驗(yàn)的程序員,你也許可以直接跳到這段文字最下端的程序部分。出奇的簡單。

你需要熟悉Python語法。如果你從來沒有用過python, 我建議你讀一下 Zed Shaw 的《 Learn Python the Hard Way》。

確定你下載并安裝了python,而且可以正常運(yùn)行程序。這段文字中的python不算很長,所以你可以用任何文本編輯器從而省去安裝任何軟件的麻煩。(譯者注:在線的python 編譯器也可以運(yùn)行這段程序,其中一種編譯器在jobbole 的另一篇文章中提到過,http://blog.jobbole.com/53346/)。

***部分,什么檢測到了一種語言?

在你寫區(qū)分語言的程序之前,你需要回答一個(gè)問題:什么區(qū)別了兩種語言?

有趣的是,這個(gè)問題的答案會(huì)根據(jù)不同的比較語言而有所不同。比如:

女性が牛乳を飲んだ。 (譯者注: 日語:女性喝牛奶。)

你是怎么知道這句話不是英文的?你也許不熟悉日文,但是你肯定知道這些字符不是英文,你甚至不需要知道具體哪個(gè)字符不存在于英文字母中。

La femme boit du lait.   (譯者注: 法語:女性喝牛奶。)

你怎么知道這句話不是英文的?有一點(diǎn)麻煩。每個(gè)字母都在英文中。甚至每一個(gè)字母和句型結(jié)構(gòu)都和英文的同一個(gè)意思的那句話很相似—— “The woman drank milk.” (譯者注: 英語:女性喝牛奶。) 。 你的大腦用了另一個(gè)特性去判斷這個(gè):盡管字母很相似,這兩句話發(fā)音沒有任何相似之處。

還有很多更復(fù)雜的方式去檢測兩種不同的語言(例如,語法、句法等等)上面提到的兩個(gè)特性似乎足夠用來區(qū)分很多的書寫文字。

提問:你可以想到一個(gè)相反的例子嘛? 兩種不能用字符或者發(fā)音而區(qū)分的語言?(譯者注:這是我想到的,和編者沒有任何關(guān)系。Hindi 和Nepali 的區(qū)分度極低,印度的一種語言和尼泊爾的官方語言的區(qū)別度非常低,字符區(qū)別很低而發(fā)音更高達(dá)50%的相似度。當(dāng)然,他們兩個(gè)是同一語系的語種。)

第二部分,如何用計(jì)算機(jī)檢測到這些特性?

***個(gè)特性已經(jīng)存在于任何一臺(tái)現(xiàn)代化的機(jī)器里 ——character encodings 字符解碼允許任何一臺(tái)計(jì)算機(jī)去通過二進(jìn)制碼而呈現(xiàn)每一個(gè)字符。我們要用unicode 在Python 的程序中。

第二個(gè)特征更有意思。如何能讓一臺(tái)電腦檢測到字符串的發(fā)音呢?答案比想象的簡單點(diǎn):字符串順序是按照聲音解碼的!他們有直接的穩(wěn)定的對(duì)應(yīng)關(guān)系- 語言改變的非常緩慢。

因此,你可以用下面的兩個(gè)特性去檢測一行文本語言:

  • 單個(gè)字符的重復(fù)性
  • 字符串的重復(fù)性

實(shí)際上,這兩個(gè)特性濃縮到了一個(gè)特性中:字符串的順序。單個(gè)字符的重復(fù)性只是字符串的重復(fù)性。

快速知識(shí)補(bǔ)充:在計(jì)算機(jī)語言學(xué)中,字符串的長度 n 被定義為 n-gram。 “a” 是一個(gè)gram, 1-gram. “bc”是兩個(gè)gram,2-gram or bigram。 “def” 是三個(gè)gram, 3-gram 或者trigram,以此類推。

第三部分,用python 實(shí)現(xiàn)吧!

首先,我們需要計(jì)算某個(gè)字符串在特定文本中出現(xiàn)的次數(shù)。為了封裝結(jié)果,我們將建立一個(gè)NGram 類。

原文鏈接:http://blog.ebookglue.com/write-language-detector-50-lines-python/

譯文鏈接:http://blog.jobbole.com/54707/

責(zé)任編輯:陳四芳 來源: 伯樂在線
相關(guān)推薦

2013-03-04 10:22:30

Python

2018-01-23 09:17:22

Python人臉識(shí)別

2022-03-23 10:21:56

Python代碼工具

2023-12-25 15:28:57

Python工具pywebio

2014-05-15 09:45:58

Python解析器

2010-12-28 11:17:50

chkrootkitrootkit檢測器

2025-02-24 08:20:00

AI代碼生成

2022-06-29 09:02:31

go腳本解釋器

2019-06-05 15:00:28

Java代碼區(qū)塊鏈

2023-11-29 08:10:36

javascriptH5游戲

2018-07-12 09:51:04

Python代碼對(duì)象模型

2022-06-28 08:17:10

JSON性能反射

2021-06-10 13:50:55

代碼開發(fā)數(shù)據(jù)庫

2022-07-14 10:54:15

Python代碼Matplotlib

2018-06-19 08:35:51

情感分析數(shù)據(jù)集代碼

2018-03-22 13:58:06

Python換臉程序

2010-12-22 21:52:12

rkhunter

2017-07-19 13:27:44

前端Javascript模板引擎

2018-02-06 10:04:59

2014-01-22 09:19:57

JavaScript引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)