0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Python編寫能夠從原始文本提取信息的程序

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-08-13 10:02 ? 次閱讀

【導(dǎo)讀】我們從日常每天都會(huì)用到的推薦系統(tǒng)到現(xiàn)在研究火熱的開放性聊天、對(duì)話機(jī)器人,越來越多的產(chǎn)品與應(yīng)用的背后都需要自然語言處理(NLP)和知識(shí)圖譜的技術(shù)。也有越來越多的學(xué)者與工作人員投身于 NLP 領(lǐng)域的研究。為什么要研究NLP呢?如果計(jì)算機(jī)想要更好的理解人類的語言,擁有更好的人機(jī)交互體驗(yàn),都離不開 NLP。那么,計(jì)算機(jī)到底是如何理解人類語言的?接下來讓我們跟著作者 Adam Geitgey ,和他一起體會(huì)自然語言處理技術(shù)里那些有意思的事情。

計(jì)算機(jī)非常擅長處理像電子表格、數(shù)據(jù)庫這樣的結(jié)構(gòu)化數(shù)據(jù)。但是,人與人之間是用語言來交流的,而不是用表格。這對(duì)計(jì)算機(jī)來說就很倒霉了。

然而不幸的是,我們并不是生活在所有數(shù)據(jù)都是結(jié)構(gòu)化的歷史交替版本中

這個(gè)世界上的許多信息都是非結(jié)構(gòu)化的,如英語,或者其他人類語言寫成的原文。那么,如何讓計(jì)算機(jī)理解這種非結(jié)構(gòu)化文本并從中提取數(shù)據(jù)呢?

自然語言處理(Natural Language Processing,NLP)是人工智能的子領(lǐng)域之一,其重點(diǎn)是使計(jì)算機(jī)能夠理解和處理人類語言。在本文中,我們將知曉NLP是如何工作的,并學(xué)習(xí)如何使用Python編寫能夠從原始文本提取信息的程序。(注:作者在文中選擇的語言對(duì)象是英語)

計(jì)算機(jī)能夠理解語言嗎?

自從計(jì)算機(jī)問世以來,為了能夠開發(fā)出可以理解語言的程序,程序員們一直在努力。為什么一定要這么做呢?理由很簡單:人類運(yùn)用語言已經(jīng)有千年的歷史,如果計(jì)算機(jī)能夠讀懂這些,對(duì)人們將會(huì)非常有幫助。

計(jì)算機(jī)雖然還不能像人類那樣真正地理解語言,但是它們現(xiàn)在已經(jīng)可以做很多事情了。在某些領(lǐng)域中,可以用NLP來做的那些事情,已經(jīng)能夠讓人感到很神奇了。如果將NLP技術(shù)應(yīng)用到你自己的項(xiàng)目,也許可以節(jié)省很多時(shí)間。

好消息是,NLP的最近進(jìn)展可以通過開源Python庫(如spaCy、textcy 和 neuralcoref)輕松訪問。只需簡單幾行Python代碼就能完事兒,這一點(diǎn)就很讓人驚嘆。

難點(diǎn):從文本中提取意義

閱讀和理解英語的過程是非常復(fù)雜的,尤其是考慮到是否有遵循邏輯和一致的規(guī)則。例如,下面這個(gè)新聞標(biāo)題是什么意思?

“Environmental regulators grill business owner over illegal coal fires.”

這新聞標(biāo)題,究竟想表達(dá)什么意思呢?監(jiān)管機(jī)構(gòu)是否就非法燃煤的問題對(duì)企業(yè)主進(jìn)行了質(zhì)詢?還是監(jiān)管者把非法燃煤的企業(yè)主拿來燒烤了?你看,如果用計(jì)算機(jī)來解析英語的話,事情就會(huì)變得異常復(fù)雜。

機(jī)器學(xué)習(xí)中,做任何一件復(fù)雜的事情通常意味著需要構(gòu)建一個(gè)工作流。這個(gè)想法就是將你的問題分解成很小的部分,然后使用機(jī)器學(xué)習(xí)來分別解決每一個(gè)部分。然后,將幾個(gè)相互作用的機(jī)器學(xué)習(xí)模型鏈接在一起,你就得以能夠完成非常復(fù)雜的事情。

這就是我們將用在NLP的策略。我們將把理解英語的過程分解成小塊,看看每個(gè)部分是如何工作的。

一步一步構(gòu)建NLP工作流

我們來看一下取自維基百科上的一段文字:

London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium.

(來源維基百科詞條 London)

這一段包含了幾個(gè)有用的事實(shí)。如果計(jì)算機(jī)能夠讀懂這段文字,并理解London(倫敦)是一座城市,位于England(英格蘭),由Romans(羅馬人)建立的地方,那就太好了。但是要實(shí)現(xiàn)這一目標(biāo),就必須教會(huì)計(jì)算機(jī)學(xué)習(xí)書面語言的最基本的概念,然后再繼續(xù)前進(jìn)。

▌第一步:句子切分(Sentence Segmentation)

工作流的第一步,是將文本切分成單獨(dú)的句子。我們得到的是:

1.“London is the capital and most populous city of England and the United Kingdom.”

2.“Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia.”

3.“It was founded by the Romans, who named it Londinium.”

我們可以假設(shè),英語中每個(gè)句子都表達(dá)了一種獨(dú)立的意思或者想法。編寫程序來理解單個(gè)句子,可比理解整個(gè)段落要容易多了。

為句子切分模型編碼就像你看到標(biāo)點(diǎn)符號(hào)時(shí)對(duì)句子進(jìn)行斷句一樣,都不是難事。但是,現(xiàn)代的NLP工作流通常會(huì)使用更為復(fù)雜的技術(shù),就算文檔格式不是很干凈利落,也能正常工作。

▌第二步:單詞標(biāo)記(Word Tokenization)

現(xiàn)在我們已經(jīng)將文本切分成了句子,這樣就可以做到一次處理一個(gè)句子。就從這段文本的第一條句子開始吧:

“London is the capital and most populous city of England and the United Kingdom.”

NLP工作流中的下一步就是將這個(gè)句子切分成單獨(dú)的單詞或標(biāo)記。這就是所謂的“標(biāo)記”(Tokenization)。以下是單詞標(biāo)記的結(jié)果:

“London”, “is”, “ the”, “capital”, “and”, “most”, “populous”, “city”, “of”, “England”, “and”, “the”, “United”, “Kingdom”, “.”

標(biāo)記在英語中很容易做到。只要單詞之間有空格,我們就可以將它們分開。我們還將標(biāo)點(diǎn)符號(hào)視為單獨(dú)的標(biāo)記,因?yàn)闃?biāo)點(diǎn)符號(hào)也有意義。

▌第三步:預(yù)測(cè)每個(gè)標(biāo)記的詞性

接下來,我們將查看每個(gè)標(biāo)記并試著猜測(cè)它的詞性:名詞、動(dòng)詞還是形容詞等等。只要知道每個(gè)單詞在句子中的作用,我們就可以開始理解這個(gè)句子在表達(dá)什么。

我們可以通過將每個(gè)單詞(以及周圍的一些額外單詞)輸入到預(yù)訓(xùn)練的詞性分類模型來實(shí)現(xiàn),如下圖所示:

需要記住一點(diǎn):這種模型完全基于統(tǒng)計(jì)數(shù)據(jù),實(shí)際上它并不能像人類那樣理解單詞的含義。它只知道如何根據(jù)以前所見過的類似句子和單詞來猜測(cè)詞性。

在處理完整個(gè)句子后,我們會(huì)得到這樣的結(jié)果,如下圖所示:

有了這些信息之后,我們就可以開始收集一些非常基本的含義。比如,我們看到這個(gè)句子中的名詞包括“London”和“capital”,所以可以認(rèn)為這個(gè)句子可能是在說 London。

▌第四步:文本詞形還原(Text Lemmatization)

在英語(以及大多數(shù)語言)中,單詞是以不同的形式出現(xiàn)的。看看下面這兩個(gè)句子:

1.I had apony.

2.I had twoponies.

這兩個(gè)句子都有名詞“pony”,但是它們的詞性不同。當(dāng)計(jì)算機(jī)處理文本時(shí),了解每個(gè)單詞的基本形式是很有幫助的,唯有如此你才能知道這兩個(gè)句子是在討論同一個(gè)概念。否則,字符串“pony”和“ponies”在計(jì)算機(jī)看來就是兩個(gè)完全不同的單詞。

在NLP中,我們將發(fā)現(xiàn)這一過程叫“詞形還原”(Lemmatization),就是找出句子中每個(gè)單詞的最基本的形式或引理。

這同樣也適用于動(dòng)詞。我們還可以通過找到動(dòng)詞的詞根,以非共軛形式(unconjugated form)來引申動(dòng)詞。所以,“I had two ponies”就變成了“I [have] two [pony].”

詞形還原通常是通過查找單詞生成表格來完成的,也可能有一些自定義規(guī)則來處理你以前從未見過的單詞。

下面是句子詞形還原之后添加動(dòng)詞的詞根形式之后的樣子:

我們所做的唯一改變就是將“is”變成“be”。

▌第五步:識(shí)別停止詞(Identifying StopWords)

接下來,我們要考慮句子中每個(gè)單詞的重要性。英語中有很多填充詞,經(jīng)常出現(xiàn)“and”、“the”和“a”。當(dāng)對(duì)文本進(jìn)行統(tǒng)計(jì)時(shí),這些填充詞會(huì)帶來很多噪音,因?yàn)樗鼈儽绕渌~出現(xiàn)得更頻繁。一些NLP工作流會(huì)將它們標(biāo)記為停止詞(stop words),即在進(jìn)行任何統(tǒng)計(jì)分析之前可能想要過濾掉的單詞。

這個(gè)句子使用停用詞變灰之后看上去像下面的樣子:

我們是通過檢查已知停止詞的編碼列表來識(shí)別停止詞的。但是,并沒有一個(gè)適合所有應(yīng)用的標(biāo)準(zhǔn)停止詞列表。因此,要忽略的單詞列表可能因應(yīng)用而異。

例如,如果你要構(gòu)建搖滾樂隊(duì)的搜索引擎,你要確保不會(huì)忽略“The”這個(gè)單詞。因?yàn)椤癟he”這個(gè)單詞不僅僅出現(xiàn)在很多樂隊(duì)的名字中,上世紀(jì)80年代還有一支著名的搖滾樂隊(duì)就叫“The The”!

▌第六步:依存句法分析(Dependency Parsing)

下一步就是弄清楚句子中所有單詞是如何相互關(guān)聯(lián)的,這稱為依存句法分析(Dependency Parsing)。

我們的目標(biāo)就是構(gòu)建一棵依存樹,為句子中每個(gè)單詞分配一個(gè)母詞(parent word)。這棵樹的根就是句子中的主動(dòng)詞(main verb)。這個(gè)句子的解析樹的開頭看上去如下圖所示:

但我們還可以更進(jìn)一步。除了識(shí)別每個(gè)單詞的母詞之外,我們還可以預(yù)測(cè)這兩個(gè)單詞之間存在的關(guān)系類型:

這棵解析樹向我們展示了這個(gè)句子的主語是名詞“London”,它與單詞“capital”有“be”的關(guān)系。這樣,我們終于知道了一些有用的信息:London是一個(gè)capital(首都)!如果我們按照完整的解析樹來解析這個(gè)句子(超出所示內(nèi)容),我們甚至?xí)l(fā)現(xiàn):London是英國的首都。

就像我們之前使用機(jī)器學(xué)習(xí)模型預(yù)測(cè)詞性一樣,依存語法分析也可以通過將單詞輸入到機(jī)器學(xué)習(xí)模型中并輸出結(jié)果來實(shí)現(xiàn)。但是,解析單詞的依存關(guān)系是一項(xiàng)特別復(fù)雜的任務(wù),需要另起一篇文章來詳細(xì)解釋。如果你好奇它是如何工作的,可以去參閱Matthew Honnibal寫的一篇優(yōu)秀文章《Parsing English in 500 Lines of Python》,我們?cè)谖哪└缴狭碎喿x鏈接。

要注意的是:盡管這篇文章的作者在 2015 年聲稱,這種方法現(xiàn)在已成為標(biāo)準(zhǔn)。但是實(shí)際上,它已經(jīng)過時(shí)了,甚至連作者都不再使用這個(gè)方法了。2016年,Google 發(fā)布了一個(gè)新的依存句法分析器,名為 Parsey McParseface,它使用了一種新的深度學(xué)習(xí)方法,迅速在整個(gè)行業(yè)流行開來,其性能超過了以前的基準(zhǔn)測(cè)試。一年后,他們發(fā)布了一種叫做 ParseySaurus 的新模型,實(shí)現(xiàn)了進(jìn)一步的改進(jìn)。換句話說,句法分析技術(shù)仍然是一個(gè)活躍的研究領(lǐng)域,還在不斷變化和改進(jìn)。

此外,英語中有很多句子是模棱兩可的,很難分析。在這些情況下,模型會(huì)根據(jù)句子的分析版本進(jìn)行猜測(cè),但是并不完美,有時(shí)候模型會(huì)出現(xiàn)令人尷尬的錯(cuò)誤。但隨著時(shí)間的推移,我們的NLP模型將繼續(xù)以合理的方式更好地分析文本。

▌第六b步:查找名詞短語

到目前為止,我們把句子中的每個(gè)單詞都視為一個(gè)獨(dú)立的實(shí)體。但有時(shí)候?qū)⒈硎疽粋€(gè)想法或事物的單詞放在一起更有意義。我們可以用依存句法解析樹中的信息,自動(dòng)將所有討論同一事物的單詞分組在一起。

例如,下面這個(gè)形式:

我們可以對(duì)名詞短語進(jìn)行分組來生成如下圖所示:

是否采取這一步驟,要取決于我們的最終目標(biāo)。但是,如果我們不需要關(guān)心哪些單詞的額外細(xì)節(jié),而是更關(guān)心提取完整的意思,那么這通常是簡化句子的快速而簡單的方法。

▌第七步:命名實(shí)體識(shí)別(NER)

既然我們已經(jīng)完成了所有這些艱苦的工作,我們終于可以越過初級(jí)語法,開始真正地提取句子的意思。

在這個(gè)句子中,我們有下列名詞:

如上圖所示,有些名詞表示世界上真實(shí)的事物。例如,“London”、“England”和“United Kingdom”代表的是地圖上的物理位置。能夠檢測(cè)到這一點(diǎn),真實(shí)太好了!有了這些信息,我們就可以使用NLP自動(dòng)提取文本中提到的真實(shí)世界位置列表。

命名實(shí)體識(shí)別(Named Entity Recognition,NER)的目標(biāo)是用它們所代表的真實(shí)概念來檢測(cè)和標(biāo)記這些名詞。在我們的NER標(biāo)記模型中運(yùn)行每個(gè)標(biāo)記之后,這條句子看起來如下圖所示:

但是,NER系統(tǒng)并非只是簡單地進(jìn)行字典查找。相反,它們使用單詞如何出現(xiàn)在句子中的上下文和統(tǒng)計(jì)模型來猜測(cè)單詞所代表的名詞類型。一個(gè)優(yōu)秀的NER系統(tǒng)可以通過上下文線索來區(qū)分人名“Brooklyn Decker”和地名“Brooklyn”之間的區(qū)別。

下面是典型NER系統(tǒng)可以標(biāo)記的一些對(duì)象:

人名

公司名稱

地理位置(包括物理位置和行政位置)

產(chǎn)品名

日期和時(shí)間

金額

事件名稱

NER 有很多用途,因?yàn)樗梢院苋菀椎貜奈谋局蝎@取結(jié)構(gòu)化數(shù)據(jù)。這是快速從 NLP工作流中獲取價(jià)值的最簡單方法之一。

▌第八步:指代消解

至此,我們已經(jīng)對(duì)句子有了一個(gè)有用的表述。我們知道了每個(gè)單詞的詞性,這些單詞之間的關(guān)系,以及哪些單詞表示命名實(shí)體。

但是,我們?nèi)匀挥幸粋€(gè)很大的問題。在英語中有大量像“he”、“she”、“it”這樣的代詞。這些代詞是我們使用的“快捷方式”,這樣某些名稱就不用在每條句子中反復(fù)出現(xiàn)。人們可以根據(jù)文本中上下文來理解這些代詞的含義。但NLP模型做不到這一點(diǎn),它不會(huì)知道這些代詞代表的是什么意思,因?yàn)樗荒苤鹁錂z測(cè)每個(gè)句子。

讓我們看一下文本中的第三句話:

“It was founded by the Romans, who named it Londinium.”

如果我們用 NLP工作流來分析這個(gè)句子,模型只知道“It”是由 Romans 創(chuàng)立的。但是,我們讀過后都知道,“It”指的是“London”,這句的意思是:London是由 Romans 創(chuàng)立的。

指代消解(Coreference Resolution)的目標(biāo)是,通過跟蹤句子中的代詞來找到相同的映射。我們要弄清楚所有指向同一個(gè)實(shí)體的代詞。

如下圖所示,是文本中為“London”一詞進(jìn)行指代消解的結(jié)果:

通過將指代消解、解析樹和命名實(shí)體信息相結(jié)合,我們應(yīng)該能夠從這段文本中提取大量的信息!

指代消解是我們工作流準(zhǔn)備實(shí)施中最困難的步驟之一。它比句子解析還要難。深度學(xué)習(xí)方面的最新進(jìn)展已經(jīng)產(chǎn)生了更為準(zhǔn)確的新方法,但是還不夠完美。

用Python編寫NLP工作流

如下圖所示,是我們完整的NLP工作流概述:

注:指代消解是可選步驟,并非必選步驟。上圖所示的這些是典型的NLP工作流中的步驟,但你可以跳過某些步驟或重新排序步驟,這要取決于你想做的事情以及NLP庫的實(shí)現(xiàn)方式。例如,某些像spaCy這樣的庫使用依存句法分析的結(jié)果在工作流中進(jìn)行句子切割。

首先,假設(shè)你已經(jīng)安裝了Python 3,那么可以按照下面的步驟安裝 spaCy:

#InstallspaCypip3install-Uspacy#DownloadthelargeEnglishmodelforspaCypython3-mspacydownloaden_core_web_lg#Installtextacywhichwillalsobeusefulpip3install-Utextacy

然后,下面是運(yùn)行NLP工作流的代碼:

importspacy#LoadthelargeEnglishNLPmodelnlp=spacy.load('en_core_web_lg')#Thetextwewanttoexaminetext="""LondonisthecapitalandmostpopulouscityofEnglandandtheUnitedKingdom.StandingontheRiverThamesinthesoutheastoftheislandofGreatBritain,Londonhasbeenamajorsettlementfortwomillennia.ItwasfoundedbytheRomans,whonameditLondinium."""#ParsethetextwithspaCy.Thisrunstheentirepipeline.doc=nlp(text)#'doc'nowcontainsaparsedversionoftext.Wecanuseittodoanythingwewant!#Forexample,thiswillprintoutallthenamedentitiesthatweredetected:forentityindoc.ents:print(f"{entity.text}({entity.label_})")

運(yùn)行后將獲得我們的文本中檢測(cè)到的命名實(shí)體和實(shí)體類型的列表:

London(GPE)England(GPE)theUnitedKingdom(GPE)theRiverThames(FAC)GreatBritain(GPE)London(GPE)twomillennia(DATE)Romans(NORP)Londinium(PERSON)

注意,在“Londinium”一詞上有一個(gè)錯(cuò)誤:認(rèn)為該詞是人名而非地名。之所以出現(xiàn)這種錯(cuò)誤是因?yàn)橛?xùn)練集中沒有與之類似的東西,它所能做出的最好猜測(cè)。如果你要解析具有此類唯一或?qū)S眯g(shù)語的文本,你就需要對(duì)命名實(shí)體檢測(cè)進(jìn)行一些模型微調(diào)。

讓我們考慮一下檢測(cè)實(shí)體,并將其進(jìn)行扭曲以構(gòu)建一個(gè)數(shù)據(jù)清理器。通過查閱海量文檔并試圖手工編輯所有的名稱,需要耗費(fèi)數(shù)年的時(shí)間。但是對(duì)于NLP來說,這實(shí)在是小菜一碟。這里有一個(gè)簡單的 scrubber,可以很輕松地刪除掉它所檢測(cè)到的所有名稱:

importspacy#LoadthelargeEnglishNLPmodelnlp=spacy.load('en_core_web_lg')#Replaceatokenwith"REDACTED"ifitisanamedefreplace_name_with_placeholder(token):iftoken.ent_iob!=0andtoken.ent_type_=="PERSON":return"[REDACTED]"else:returntoken.string#Loopthroughalltheentitiesinadocumentandcheckiftheyarenamesdefscrub(text):doc=nlp(text)forentindoc.ents:ent.merge()tokens=map(replace_name_with_placeholder,doc)return"".join(tokens)s="""In1950,AlanTuringpublishedhisfamousarticle"ComputingMachineryandIntelligence".In1957,NoamChomsky’sSyntacticStructuresrevolutionizedLinguisticswith'universalgrammar',arulebasedsystemofsyntacticstructures."""print(scrub(s))

運(yùn)行這段代碼會(huì)得到下面的結(jié)果

In1950,[REDACTED]publishedhisfamousarticle"ComputingMachineryandIntelligence".In1957,[REDACTED]SyntacticStructuresrevolutionizedLinguisticswith'universalgrammar',arulebasedsystemofsyntacticstructures.

▌提取事實(shí)

除了用 spaCy 外,還可以用一個(gè)叫 textacy 的 python 庫,它在spaCy 的基礎(chǔ)上,實(shí)現(xiàn)了幾種常見的數(shù)據(jù)提取算法。

textacy 實(shí)現(xiàn)的算法中,有一種叫半結(jié)構(gòu)化語句提?。⊿emi-structured Statement Extraction)算法。我們可以使用這個(gè)算法進(jìn)行搜索解析樹,查找主語是“London”且動(dòng)詞為“be”的簡單語句。這有助于我們找到有關(guān)“London”的事實(shí)。

代碼如下所示:

importspacyimporttextacy.extract#LoadthelargeEnglishNLPmodelnlp=spacy.load('en_core_web_lg')#Thetextwewanttoexaminetext="""LondonisthecapitalandmostpopulouscityofEnglandandtheUnitedKingdom.StandingontheRiverThamesinthesoutheastoftheislandofGreatBritain,Londonhasbeenamajorsettlementfortwomillennia.ItwasfoundedbytheRomans,whonameditLondinium."""#ParsethedocumentwithspaCydoc=nlp(text)#Extractsemi-structuredstatementsstatements=textacy.extract.semistructured_statements(doc,"London")#Printtheresultsprint("HerearethethingsIknowaboutLondon:")forstatementinstatements:subject,verb,fact=statementprint(f"-{fact}")

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

HerearethethingsIknowaboutLondon:-thecapitalandmostpopulouscityofEnglandandtheUnitedKingdom.-amajorsettlementfortwomillennia.

這么簡單的演示,也許不會(huì)讓人感到印象特別深刻。但是如果你在維基百科的“London”詞條上運(yùn)行同樣的代碼,而不是僅僅使用三條句子來演示,你就會(huì)得到更加令人印象深刻的結(jié)果:

Here are the things I know about London:

- the capital and most populous city of England and the United Kingdom

- a major settlement for two millennia

- the world's most populous city from around 1831 to 1925

- beyond all comparison the largest town in England

- still very compact

- the world's largest city from about 1831 to 1925

- the seat of the Government of the United Kingdom

- vulnerable to flooding

- "one of the World's Greenest Cities" with more than 40 percent green space or open water

- the most populous city and metropolitan area of the European Union and the second most populous in Europe

- the 19th largest city and the 18th largest metropolitan region in the world

- Christian, and has a large number of churches, particularly in the City of London

- also home to sizeable Muslim, Hindu, Sikh, and Jewish communities

- also home to 42 Hindu temples

- the world's most expensive office market for the last three years according to world property journal (2015) report

- one of the pre-eminent financial centres of the world as the most important location for international finance

- the world top city destination as ranked by TripAdvisor users

- a major international air transport hub with the busiest city airspace in the world

- the centre of the National Rail network, with 70 percent of rail journeys starting or ending in London

- a major global centre of higher education teaching and research and has the largest concentration of higher education institutes in Europe

- home to designers Vivienne Westwood, Galliano, Stella McCartney, Manolo Blahnik, and Jimmy Choo, among others

- the setting for many works of literature

- a major centre for television production, with studios including BBC Television Centre, The Fountain Studios and The London Studios

- also a centre for urban music

- the "greenest city" in Europe with 35,000 acres of public parks, woodlands and gardens

- not the capital of England, as England does not have its own government

現(xiàn)在事情變得有趣了!這就是我們自動(dòng)收集的大量信息。

你還可以試著安裝neuralcoref庫并在工作流中添加指代消解。這樣一來你就能得到更多的事實(shí),因?yàn)樗鼤?huì)捕捉到那些提到“it”的句子,而不是直接提及“London”的句子。

▌我們還能做什么?

查看spaCy的文檔和textacy的文檔,可以看到許多解析文本的方法示例。在本文中,我們只是用了一個(gè)小小的樣本示例。

這里還有一個(gè)實(shí)例:假設(shè)你正在構(gòu)建一個(gè)網(wǎng)站,讓用戶使用我們?cè)谏弦粋€(gè)示例中提取的信息查看世界上每座城市的信息。

如果在你的網(wǎng)站上有搜索功能,那么就可以像 Google 那樣自動(dòng)填充常見的搜索查詢,這點(diǎn)子可能很不錯(cuò),如下圖所示:

Google對(duì)“London”的自動(dòng)填充建議

但是要做到這一點(diǎn),我們需要一個(gè)可能完成的列表來為用戶提供建議??梢允褂肗LP來快速生成這些數(shù)據(jù)。

要怎么生成這些數(shù)據(jù)呢?這里有一種方法,可以從文檔中提取頻繁提到的名詞塊:

importspacyimporttextacy.extract#LoadthelargeEnglishNLPmodelnlp=spacy.load('en_core_web_lg')#Thetextwewanttoexaminetext="""Londonis[..shortenedforspace..]"""#ParsethedocumentwithspaCydoc=nlp(text)#Extractnounchunksthatappearnoun_chunks=textacy.extract.noun_chunks(doc,min_freq=3)#Convertnounchunkstolowercasestringsnoun_chunks=map(str,noun_chunks)noun_chunks=map(str.lower,noun_chunks)#Printoutanynounsthatareatleast2wordslongfornoun_chunkinset(noun_chunks):iflen(noun_chunk.split(""))>1:print(noun_chunk)

得到如下的輸出:

westminster abbey natural history museum west end east end st paul's cathedral royal albert hall london underground great fire british museum london eye…. etc ….

本文例舉的內(nèi)容只是你可以用NLP做的一小部分。在后續(xù)文章中,我們將會(huì)討論NLP的其他應(yīng)用,如文本分類,以及像Amazon Alexa這樣的系統(tǒng)如何解析問題。

現(xiàn)在你就可以安裝spaCy,開始嘗試一下吧!如果你不是Python用戶,使用的是不同的NLP庫,文章中這些步驟,在你的處理過程中仍是有借鑒可取之處的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7289

    瀏覽量

    87516
  • 人工智能
    +關(guān)注

    關(guān)注

    1789

    文章

    46316

    瀏覽量

    236467
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4756

    瀏覽量

    84283

原文標(biāo)題:計(jì)算機(jī)如何理解我們的語言?NLP is fun!

文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何提取工頻含諧波的電壓電流信號(hào)頻率相位幅值等信息

    ` 本帖最后由 tyxtyu 于 2015-4-13 11:20 編輯 程序框圖如圖,目的是求電壓電流的頻率幅值相位等信息,現(xiàn)以基波信號(hào)作為驗(yàn)證。提取信息采用的是信號(hào)處理>波形測(cè)量
    發(fā)表于 04-13 11:16

    使用labview提取信息,

    使用labview如何提取某個(gè)特殊字符所在的行,如圖根據(jù)FAILED提取出1515和1527行,且文件中會(huì)有很多包涵FAILED的行
    發(fā)表于 05-05 09:33

    NLPIR在文本信息提取方面的優(yōu)勢(shì)介紹

    ,NLPIR平臺(tái)KGB知識(shí)圖譜在文本信息提取的優(yōu)勢(shì): 1、能夠解析不同格式文檔和圖片KGB知識(shí)圖譜引擎,能夠對(duì)不同版本和格式的文檔進(jìn)行解析:TXT、DOC、EXCEL、PPT、PDF、
    發(fā)表于 09-12 15:33

    文本信息抽取的分階段詳細(xì)介紹

    模型是上述一般文本信息抽取的具體實(shí)現(xiàn)。 NLPIR大數(shù)據(jù)語義智能分析平臺(tái)在文本信息提取介紹方面,能夠實(shí)現(xiàn)新詞
    發(fā)表于 09-16 15:03

    FreeRTOS如何隊(duì)列中獲取信息

    隊(duì)列中獲取信息時(shí)pxQueue->u.pcReadFrom += pxQueue->uxItemSize; 先把u.pcReadFromu.pcReadFrom指針偏移
    發(fā)表于 07-19 08:03

    漢字字庫的點(diǎn)陣提取程序

    漢字字庫的點(diǎn)陣提取程序可以漢字字庫中提取漢字的點(diǎn)陣,是一個(gè)編寫液晶顯示漢字的軟件工具。
    發(fā)表于 08-05 08:51 ?115次下載
    漢字字庫的點(diǎn)陣<b class='flag-5'>提取</b><b class='flag-5'>程序</b>

    如何使用Python編寫一個(gè)簡單的程序

    按照軟件行業(yè)傳統(tǒng)習(xí)慣,當(dāng)你學(xué)習(xí)一種新的編程語言如Python時(shí),首先編寫一個(gè)“Hello World! ”程序。請(qǐng)執(zhí)行以下步驟,以創(chuàng)造你的“Hello World!” Python
    的頭像 發(fā)表于 01-16 15:21 ?2.2w次閱讀

    如何使用TensorFlow LiteAndroid設(shè)備圖像提取文本

    您展示如何使用 TensorFlow Lite Android 設(shè)備上的圖像中提取文本。我們將引導(dǎo)您完成最近開源的光學(xué)字符識(shí)別 (OCR) Android 參考應(yīng)用的關(guān)鍵步驟,您可參考該處獲取完整代碼。在下方動(dòng)畫中,可以看到
    的頭像 發(fā)表于 11-02 15:34 ?3320次閱讀

    如何使用OpenCV和Python圖像中提取感興趣區(qū)域

    今天我們將一起探究如何使用OpenCV和Python圖像中提取感興趣區(qū)域(ROI)。 在之間的文章中,我們完成了圖像邊緣提取,例如從臺(tái)球桌中
    的頭像 發(fā)表于 02-07 14:42 ?1702次閱讀

    Python的PDF表格提取器-Camelot

    Python 第三方模塊 Camelot 能夠精準(zhǔn)識(shí)別PDF中的表格信息,并提取為pandas數(shù)據(jù)結(jié)構(gòu),而且還能導(dǎo)出為多種格式:JSON,Excel,HTML和Sqlite。
    的頭像 發(fā)表于 02-24 11:04 ?2061次閱讀
    <b class='flag-5'>Python</b>的PDF表格<b class='flag-5'>提取</b>器-Camelot

    Camelot:Python超強(qiáng)大的PDF表格提取

    如果你有PDF中批量提取表格的需求,那么這篇文章就是你的福音。 Python 第三方模塊 Camelot 能夠精準(zhǔn)識(shí)別PDF中的表格信息,
    的頭像 發(fā)表于 10-21 10:57 ?1360次閱讀
    Camelot:<b class='flag-5'>Python</b>超強(qiáng)大的PDF表格<b class='flag-5'>提取</b>器

    Newspaper:用于提取和整理文章的python

    Newspaper 是一個(gè)很棒的python庫,用于提取和整理文章。 它有以下的優(yōu)點(diǎn): 多線程文章下載框架 識(shí)別新聞網(wǎng)址 html提取文本
    的頭像 發(fā)表于 10-30 14:24 ?638次閱讀

    Newspaper:能下載38種語言新聞文章的 Python 模塊

    Newspaper 是一個(gè)很棒的python庫,用于提取和整理文章。 它有以下的優(yōu)點(diǎn): 多線程文章下載框架 識(shí)別新聞網(wǎng)址 html提取文本
    的頭像 發(fā)表于 10-31 11:09 ?386次閱讀

    如何看待Python爬蟲的合法性?

    Python爬蟲是一種自動(dòng)化程序,可以互聯(lián)網(wǎng)上獲取信息提取數(shù)據(jù)。通過模擬網(wǎng)頁瀏覽器的行為,爬蟲可以訪問網(wǎng)頁、抓取數(shù)據(jù)、解析內(nèi)容,并將其保
    的頭像 發(fā)表于 11-14 10:35 ?527次閱讀

    python怎么運(yùn)行程序

    Python程序 使用任何文本編輯器(如記事本、Sublime Text、Atom等)編寫Python
    的頭像 發(fā)表于 11-24 09:25 ?2426次閱讀