日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python:处理一些格式规范的文字

發(fā)布時間:2023/11/28 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python:处理一些格式规范的文字 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

你要處理的大多數(shù)文字都是比較干凈、格式規(guī)范的。格式規(guī)范的文字通常可以滿足一些需求,不過究竟什么是“格式混亂”,什么算“格式規(guī)范”,確實(shí)因人而異。 通常,格式規(guī)范的文字具有以下特點(diǎn):

  • 使用一個標(biāo)準(zhǔn)字體(不包含手寫體、草書,或者十分“花哨的”字體) ? 雖然被復(fù)印或拍照,字體還是很清晰,沒有多余的痕跡或污點(diǎn)
  • 排列整齊,沒有歪歪斜斜的字
  • 沒有超出圖片范圍,也沒有殘缺不全,或緊緊貼在圖片的邊緣

文字的一些格式問題在圖片預(yù)處理時可以進(jìn)行解決。例如,可以把圖片轉(zhuǎn)換成灰度圖,調(diào) 整亮度和對比度,還可以根據(jù)需要進(jìn)行裁剪和旋轉(zhuǎn)(詳情請關(guān)注圖像與信號處理),但是,這些做法在進(jìn)行更具擴(kuò)展性的 訓(xùn)練時會遇到一些限制。

格式規(guī)范文字的理想示例

?

通過下面的命令運(yùn)行 Tesseract,讀取文件并把結(jié)果寫到一個文本文件中: `tesseract test.jpg text

?

cat text.txt?即可顯示結(jié)果。

識別結(jié)果很準(zhǔn)確,不過符號^*分別被表示成了雙引號和單引號。大體上可以讓你很舒服地閱讀。

通過Python代碼實(shí)現(xiàn)

import pytesseract
from PIL import Imageimage = Image.open('test.jpg')
text = pytesseract.image_to_string(image)
print text

運(yùn)行結(jié)果:

This is some text, written in Arial, that will be read by
Tesseract. Here are some symbols: !@#$%"&*()

對圖片進(jìn)行閾值過濾和降噪處理(了解即可)

很多時候我們在網(wǎng)上會看到這樣的圖片:

?

Tesseract 不能完整處理這個圖片,主要是因?yàn)閳D片背景色是漸變的,最終結(jié)果是這樣:

?

隨著背景色從左到右不斷加深,文字變得越來越難以識別,Tesseract 識別出的 每一行的最后幾個字符都是錯的。

遇到這類問題,可以先用 Python 腳本對圖片進(jìn)行清理。利用 Pillow 庫,我們可以創(chuàng)建一個 閾值過濾器來去掉漸變的背景色,只把文字留下來,從而讓圖片更加清晰,便于 Tesseract 讀取:

from PIL import Image 
import subprocessdef cleanFile(filePath, newFilePath): image = Image.open(filePath)# 對圖片進(jìn)行閾值過濾,然后保存image = image.point(lambda x: 0 if x<143 else 255)     image.save(newFilePath)# 調(diào)用系統(tǒng)的tesseract命令對圖片進(jìn)行OCR識別     subprocess.call(["tesseract", newFilePath, "output"])# 打開文件讀取結(jié)果file = open("output.txt", 'r')     print(file.read()) file.close()cleanFile("text2.jpg", "text2clean.png")

通過一個閾值對前面的“模糊”圖片進(jìn)行過濾的結(jié)果

?

?

除了一些標(biāo)點(diǎn)符號不太清晰或丟失了,大部分文字都被讀出來了。Tesseract 給出了最好的 結(jié)果:

?

?

從網(wǎng)站圖片中抓取文字

用 Tesseract 讀取硬盤里圖片上的文字,可能不怎么令人興奮,但當(dāng)我們把它和網(wǎng)絡(luò)爬蟲組合使用時,就能成為一個強(qiáng)大的工具。

網(wǎng)站上的圖片可能并不是故意把文字做得很花哨 (就像餐館菜單的 JPG 圖片上的藝術(shù)字),但它們上面的文字對網(wǎng)絡(luò)爬蟲來說就是隱藏起來 了,舉個例子:

  • 雖然亞馬遜的 robots.txt 文件允許抓取網(wǎng)站的產(chǎn)品頁面,但是圖書的預(yù)覽頁通常不讓網(wǎng)絡(luò)機(jī) 器人采集。

  • 圖書的預(yù)覽頁是通過用戶觸發(fā) Ajax 腳本進(jìn)行加載的,預(yù)覽圖片隱藏在 div 節(jié)點(diǎn) 下面;其實(shí),普通的訪問者會覺得它們看起來更像是一個 Flash 動畫,而不是一個圖片文 件。當(dāng)然,即使我們能獲得圖片,要把它們讀成文字也沒那么簡單。

  • 下面的程序就解決了這個問題:首先導(dǎo)航到托爾斯泰的《戰(zhàn)爭與和平》的大字號印刷版 1, 打開閱讀器,收集圖片的 URL 鏈接,然后下載圖片,識別圖片,最后打印每個圖片的文 字。因?yàn)檫@個程序很復(fù)雜,利用了前面幾章的多個程序片段,所以我增加了一些注釋以讓 每段代碼的目的更加清晰:


import time
from urllib.request import urlretrieve 
import subprocess
from selenium import webdriver
#創(chuàng)建新的Selenium driver
driver = webdriver.PhantomJS()# 用Selenium試試Firefox瀏覽器:
# driver = webdriver.Firefox()driver.get("http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200")
# 單擊圖書預(yù)覽按鈕 driver.find_element_by_id("sitbLogoImg").click() imageList = set()
# 等待頁面加載完成
time.sleep(5)
# 當(dāng)向右箭頭可以點(diǎn)擊時,開始翻頁
while "pointer" in driver.find_element_by_id("sitbReaderRightPageTurner").get_attribute("style"):driver.find_element_by_id("sitbReaderRightPageTurner").click()time.sleep(2)# 獲取已加載的新頁面(一次可以加載多個頁面,但是重復(fù)的頁面不能加載到集合中) pages = driver.find_elements_by_xpath("//div[@class='pageImage']/div/img") for page in pages:image = page.get_attribute("src")imageList.add(image)
driver.quit()# 用Tesseract處理我們收集的圖片URL鏈接 
for image in sorted(imageList):# 保存圖片urlretrieve(image, "page.jpg")p = subprocess.Popen(["tesseract", "page.jpg", "page"], stdout=subprocess.PIPE,stderr=subprocess.PIPE)f = open("page.txt", "r")p.wait() print(f.read())

和我們前面使用 Tesseract 讀取的效果一樣,這個程序也會完美地打印書中很多長長的段 落,第六頁的預(yù)覽如下所示:

6"A word of friendly advice, moncher. Be off as soon as you can,that's all I have to tell you. Happyhe who has ears to hear. Good-by,my dear fellow. Oh, by the by!" heshouted through the doorway afterPierre, "is it true that the countesshas fallen into the clutches of theholy fathers of the Society of je-sus?"Pierre did not answer and left Ros-topchin's room more sullen and an-gry than he had ever before shownhimself.

但是,當(dāng)文字出現(xiàn)在彩色封面上時,結(jié)果就不那么完美了:

   WEI' nrrd PeaceLen Nlkelayevldu IolfluyReadmg shmdd be axwlnvame asnossxble Wenfleran mm m our cram: Llhvary- Leo Tmsloy was a Russian rwovelwstI and moval phflmopher med lurA ms Ideas 01 nonviolenx reswslance m 5 We range     0, "and"

如果想把文字加工成普通人可以看懂的 效果,還需要花很多時間去處理。

下一節(jié)將介紹另一種方法來解決文字混亂的問題,尤其是當(dāng)你愿意花一點(diǎn)兒時間訓(xùn)練 Tesseract 的時候。

通過給 Tesseract 提供大量已知的文字與圖片映射集,經(jīng)過訓(xùn)練 Tesseract 就可以“學(xué)會”識別同一種字體,而且可以達(dá)到極高的精確率和準(zhǔn)確率,甚至可以忽略圖 片中文字的背景色和相對位置等問題。

總結(jié)

以上是生活随笔為你收集整理的Python:处理一些格式规范的文字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。