① 如何提取正文內容 BeautifulSoup的輸出
創建一個新網站,一開始沒有內容,通常需要抓取其他人的網頁內容,一般的操作步驟如下:
根據url下載網頁內容,針對每個網頁的html結構特徵,利用正則表達式,或者其他的方式,做文本解析,提取出想要的正文。
為每個網頁寫特徵分析這個還是太耗費開發的時間,我的思路是這樣的。
python的BeautifulSoup包大家都知道吧,
import BeautifulSoupsoup = BeautifulSoup.BeautifulSoup(html)
利用這個包先把html里script,style給清理了:
[script.extract() for script in soup.findAll('script')][style.extract() for style in soup.findAll('style')]
清理完成後,這個包有一個prettify()函數,把代碼格式給搞的標准一些:
soup.prettify()
然後用正則表達式,把所有的HTML標簽全部清理了:
reg1 = re.compile("<[^>]*>")content = reg1.sub('',soup.prettify())
剩下的都是純文本的文件了,通常是一行行的,把空白行給排除了,這樣就會知道總計有多少行,每行的字元數有多少,我用excel搞了一些每行字元數的統計,如下圖:
x坐標為行數,y坐標為該行的字元數
很明顯,會有一個峰值,81~91行就應該是這個網頁的正文部分。我只需要提取81~91行的文字就行了。
問題來了,照著這個思路,有什麼好的演算法能夠通過數據分析的方式統計出長文本的峰值在哪幾行?
BeautifulSoup不僅僅只是可以查找,定位和修改文檔內容,同樣也可以用一個好的 格式進行輸出顯示。BeautifulSoup可以處理不同類型的輸出:
格式化的輸出
非格式化的輸出
格式化輸出
BeautifulSoup中有內置的方法prettfy()來實現格式化輸出。比如:
view plain print ?
frombs4importBeautifulSoup
html_markup=「」」<pclass=」eramid」>
<ulid=」procers」>
<liclass=」procerlist」>
<divclass=」name」>plants</div>
<divclass=」number」>100000</div>
</li>
<liclass=」procerlist」>
<divclass=」name」>algae</div>
OutputinBeautifulSoup
<divclass=」number」>100000</div>
</li>
</ul>」」」
soup=BeautifulSoup(html_markup,「lxml」)
print(soup.prettify())
② 文本抽取式摘要
關鍵詞:抽取式,BM25演算法,行業知識後處理。
背景
筆者所在的公司原來已經有一個自動摘要的模塊,我只是在原來的基礎上,做了些針對特定領域的優化。
首先自動文本摘要大概分為 抽取式和生成式兩類。抽取式摘要主要是直接抽取輸入文本的幾句話來概括整段的內容,這個實現相對簡單(常用演算法 TextRank、TF-IDF 等,本文使用的是 BM25 演算法)。另一種是生成式,生成式的構成比較復雜,實現難度也很大,效果在實際落地過程中也並不理想。所以下文主要是針對抽取式自動摘要來討論的。
問題的演算法抽象
首先抽取式摘要,問題可以歸結為從文章中選取和其他句子最相關的那句話。也就是將每句話當成「搜索框」里輸入的句子,然後計算其他句子和他的相關度得分,然後選取和其他句子相關性得分最高的那句話作為摘要。
BM25演算法:
首先BM25演算法在搜索引擎領域是很有用的。這里關於BM25解析,講的很好的文章: BM25 - ywl925 - 博客園 。這里就不展開介紹了。
BM25演算法得分的歸一化
經過BM25演算法計算的得分,范圍相差會很大,筆者為了實現後面的靜態加分,先對BM25算的score進行了一個歸一化。歸一化一般最常見的兩種: Min-Max和Z score,是相對常見的概念。可以參考博客: 數據歸一化和兩種常用的歸一化方法 - ChaoSimple - 博客園
特定領域知識的積累
這里明確一下,這里所說的領域知識,主要是某些很有區分度的詞和短語。這里涉及的底層模塊也比較多。
首先是特定領域的語料庫的積累。
以中文為例,除了一些公開的語料庫,我們還需要一些擴充一些專門領域的語料。並對他們進行標注。
然後相應的,分詞模塊也要增強。
特別是針對那些領域專有的名詞。由於現在中文分詞的技術已經比較成熟,所以這塊相對來說挑戰不是很大。而且這面即使是基於HMM或者CRF做的分詞,都已經有很可觀的實用表現,和相當的泛化。不過如果能把底層的分詞的模塊性能和准確率提升一點,也會有很大的幫助,畢竟在中文文本處理中,分詞是第一步要做的基礎操作。
行業知識靜態加分
這里的實現目前還是比較粗糙的。首先總結每個行業有區分度的詞。這個詞的獲取會上面提到的特定的行業語料庫,以及針對這個領域的分詞。
在句子計算BM25得分,並歸一化後,這里判斷句子裡面是否有領域關鍵詞,如果有領域關鍵詞,則靜態的給歸一化後的BM25 分數加一個靜值。 之後對各個句子,按照這個新的分數排序。抽取得分最高的那句話。
這里還有一個問題可以深挖,就是筆者目前實現的領域知識加分,是在已經預先分好了分類的前提下,也就是說傳入的參數,除了原文還會有屬於哪個領域的具體信息。如果這個領域分類信息沒有提前獲得,那麼就需要對整段文字做一個大概的分類,這樣的難度就會大增。我們後續可以繼續討論這種情況。
③ Web文檔是什麼
Web文檔就是網頁,是構成網站的基本元素,是承載各種網站應用的平台。通俗地說,您的網站就是由網頁組成的,如果您只有域名和虛擬主機而沒有製作任何網頁的話,您的客戶仍舊無法訪問您的網站。
④ 文本特徵提取
在對文本數據進行處理時,很大一部分精力都用在數據集的特徵提取上,因此記錄一下常用的文本特徵提取方法。
文本特徵提取一般分為兩部分
(1)文本本身屬性:母音字數數、輔音字母數、···
(2)基於文本的特徵提取:TF-IDF等
比如提取以上文檔的特徵,基於文本本身可以提取特徵:
(1)字數:統計每一行text文本的詞彙數量(有多少個單詞)
(2)非重復單詞數量:統計每一行text文本中只出現一次的單詞個數
(3)長度:每一行text的長度,佔了多少存儲空間(包含空格、符號、字母等的長度)
(4)停止詞數量統計:between、but、about、very等詞彙的數量統計
(5)標點符號數量:每一行text中包含的標點符號數量
(6)大寫單詞數量:統計大寫單詞數量
(7)標題式單詞數量:統計單詞拼寫首字母是否為大寫,且其他字母為小寫的單詞數量
(8)單詞的平均長度:每一行text中每個單詞長度的平均值
這些特徵的提取不涉及復雜的函數計算,基於文本本身屬性提取直觀信息作為模型訓練的特徵。
·
TF-IDF演算法 :計算單詞權重最為有效的實現方法就是TF-IDF, 它是由Salton在1988 年提出的,以特徵詞在文檔d中出現的次數與包含該特徵詞的文檔數之比作為該詞的權重。
python中使用TfidfVectorizer函數實現TF-IDF特徵的提取,生成每個text的TF-IDF特徵。
·
經過TF-IDF特徵提取後,數據集的特徵變數超級多(TF-IDF計算了整個數據集出現的所有單詞對每個test的權重),面對這樣龐大的特徵數據,可以通過SVD實現對數據集的壓縮。
SVD的原理是將龐大的TF-IDF生成的數據集A進行拆分,設置K值(想要壓縮得到的維度,例如K=20,壓縮後得到20列的特徵數據集)X就是只有K個特徵轉換後的數據集。
經過壓縮後的TF-IDF只有K列,與01中 基於文本本身特徵 合並,即為文本數據集的特徵向量。
⑤ galgame的文本一般怎麼提取
galgame的cg可以提取
下載個crass軟體,打開軟體,指定源文件打上勾,點【瀏覽】找到.ypf【有時格式也可能是..PAK、.ARC、.AR】的文件。
.ypf有可能在pac文件夾里,有些游戲是Data文件夾里,有些直接在根目錄里,點擊執行即可提取crass軟體可以自己下載也可以在追問中留郵。
基於TextRank的游戲文本提取
TextRank演算法的思想直接借鑒了PageRank網頁排序演算法,使用在K長度窗口中詞的相鄰關系來代表PR演算法中的鏈接指向關系,與PageRank的迭代公式完全相同,基於TextRank的方法簡單有效,速度也在可接受的范圍內。但這一方法存在兩個較為明顯的不足:
1、關鍵詞的來源有限,僅為本篇文檔所有詞彙的集合,難以學習到更多的關鍵詞表示,也無法以「生成」的方式得到文章抽象的關鍵詞表述。
2、雖然TextRank考慮了關鍵詞在給定距離窗口的共現等信息,但實際上仍然偏向於給高頻詞以更高的權重,所以在實際使用中與TF-IDF這類方法相比沒有太大的優勢。
⑥ 如何使用爬蟲做一個網站
做法:傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。聚焦爬蟲的工作流程較為復雜,需要根據一定的網頁分析演算法過濾與主題無關的鏈接,保留有用的鏈接並將其放入等待抓取的URL隊列。
然後,它將根據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重復上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,並建立索引,以便之後的查詢和檢索;對於聚焦爬蟲來說,這一過程所得到的分析結果還可能對以後的抓取過程給出反饋和指導。
⑦ 網頁需要登錄,怎樣抓取其內容
網站登錄/認證有多種方式,要抽取/提取需要登錄的網頁內容,需要實現有針對性的網頁抓取軟體模塊:
1,HTTPS
2,HTTP Digest
3,HTTP Basic
4,使用網頁Form
其中,前三種是通信協議層面的,如果使用PHP,Python,Javascript, Java等語言編程,一般需要控制HTTP通信做相應的動作;而第四種是應用層面的,只需要模擬用戶填寫Form然後提交即可,相對容易一些。另外,還要考慮伺服器是否推送cookie以及會話控制等等,所以,要自己編程把所有的都實現了是一個很大的挑戰,但是,如果利用瀏覽器平台能力,這個就好解決了,例如,利用Firefox的安全管理器,網站認證都委託給Firefox,只需要編寫應用邏輯代碼即可。網頁抓取/數據抽取/信息提取軟體工具包MetaSeeker就是採用了這種方案,用統一的方法實現所有方式的認證,一種最簡單的操作方法:先訪問一次目標頁面,認證通過後安全信息都記錄在安全伺服器上,後續的抓取工作就像針對不需要認證的頁面一樣,當然,這個第一次認證操作可以用程序自動完成。
MetaSeeker工具包是免費使用的,下載地址: http://www.gooseeker.com
⑧ sparse autoencouder演算法怎麼自動提取文本特徵
深度優先在很多情況下會導致爬蟲的陷入(trapped)問題,目前常見的是廣度優先和很大程度上借用了文本檢索的技術。文本分析演算法可以快速有效的對網頁進行分類
⑨ c語言怎麼提取文本文件中我想要的一些信息
使用文件操作函數fscanf即可提取文本當中特定的信息。例如要提取一個整數,可以用fscanf(fp,"%d",&n);要提取一個字元串可以用fscanf(fp,"%s",s),其中fp為文件指針。
1、C語言標准庫提供了一系列文件操作函數。文件操作函數一般以f+單詞的形式來命名(f是file的簡寫),其聲明位於stdio.h頭文件當中。例如:fopen、fclose函數用於文件打開與關閉;fscanf、fgets函數用於文件讀取;fprintf、fputs函數用於文件寫入;ftell、fseek函數用於文件操作位置的獲取與設置。
2、常式:
#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.txt","r");//打開輸入文件
FILE*fp2=fopen("output.txt","w");//打開輸出文件
if(fp1==NULL||fp2==NULL){//若打開文件失敗則退出
puts("不能打開文件!");
return0;
}
fscanf(fp1,"%d",&a);//從輸入文件讀取一個整數
b=fgetc(fp1);//從輸入文件讀取一個字元
fgets(c,100,fp1);//從輸入文件讀取一行字元串
printf("%ld",ftell(fp1));//輸出fp1指針當前位置相對於文件首的偏移位元組數
fputs(c,fp2);//向輸出文件寫入一行字元串
fputc(b,fp2);//向輸出文件寫入一個字元
fprintf(fp2,"%d",a);//向輸出文件寫入一個整數
fclose(fp1);//關閉輸入文件
fclose(fp2);//關閉輸出文件,相當於保存
return0;
}
⑩ 網頁正文及內容圖片提取演算法
備份自: http://blog.rainy.im/2015/09/02/web-content-and-main-image-extractor/
問題: 如何提取任意(尤其是新聞、資訊類)網頁的正文內容,提取與文章內容相關的圖片,源碼可見: extractor.py 。
抓取單個網站網頁內容時通常採用正則匹配的方式,但不同網站之間結構千奇百怪,很難用統一的正則表達式進行匹配。 《基於行塊分布函數的通用網頁正文抽取演算法》 的作者總結了一般從網頁中提取文章正文的方法,提出基於行塊分布的正文抽取演算法,並給出了 PHP 、Java 等實現。這一演算法的主要原理基於兩點:
演算法步驟如下:
以上演算法基本可以應對大部分(中文)網頁正文的提取,針對有些網站正文圖片多於文字的情況,可以採用保留 <img> 標簽中圖片鏈接的方法,增加正文密度。目前少量測試發現的問題有:1)文章分頁或動態載入的網頁;2)評論長度過長喧賓奪主的網頁。