基于Drupal CMS的自然語言處理(NLP)
Drupal 作為CMSⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,內容存儲工具⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,可以通過現有的模塊⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,可以輕松集成一些NLP工具㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,來幫助我們對內容更加精準處理和優化㈠㈡㈢㈣㈤㈥㈦。
使用基于Drupal模塊的自動文本分析工具ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,可以輕松使用的 NLP 工具⒜⒝⒞⒟⒠⒡⒢⒣⒤, 我們可以在不需要了解太多NLP的情況下✵✶✷✸✹✺✻✼❄❅,通過模塊☧☬☸✡♁✙♆。,、':∶;,使用各種NLP工具⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,比如一些 Python 自然語言工具包 (NLTK) 和 Stanford Parser 并用于對用戶提供的文本進行統計分析①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯。

NLP:Natural Language Processing
NLP介紹
自然語言處理 (NLP) 是計算機科學的一個領域ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,它關注的是計算機對人類語言的理解和解釋☾☽❄☃。 NLP 在許多不同的應用程序中計算機科學❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣、人工智能和語言學領域♦☜☞☝✍☚☛☟✌✽✾✿❁❃。其中許多應用程序需要使用統計數據來表征文本⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾。這些統計數據可以使用 NLP 獲得 Python 自然語言工具包 (NLTK) 和 Stanford Parser 等應用程序㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂。
NTLK 是一個可以下載并在 Python 程序中使用的包①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯,以便工作與人類語言數據㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂。它包含用于分類✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴、標記化ⓚⓛⓜⓝⓞⓟⓠⓡⓢ、詞干提取的庫ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,標記✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴、解析和語義推理㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉。通過使用 NLTK⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,開發人員可以表征文本在統計方面ⓣⓤⓥⓦⓧⓨⓩ,并從那里在其他 NLP 應用程序中使用這些統計數據♀☿☼☀☁☂☄。
Stanford Parser 是一個包含不同自然語言的 Java 實現的包語言解析器ⓣⓤⓥⓦⓧⓨⓩ。解析器是生成用戶提供的文本的解析樹的 NLP 工具ⓣⓤⓥⓦⓧⓨⓩ。解析樹是表示句子語法結構的有序樹⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ,這個樹描述了哪些詞組在一起以及句子的主語和賓語㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉。
Features Selection and Machine Learning
機器學習是構建可以從數據中學習或從實驗數據訓練的系統ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,在 NLP 領域ⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙ,機器學習系統可以對多種不通的應用提供內容訓練ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,這些可能包括作者署名♀☿☼☀☁☂☄,這是確定一個基于在其他作品中發現的特征的作品的作者♦☜☞☝✍☚☛☟✌✽✾✿❁❃,語音識別是將口頭文字改編成文本⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,或任何其他應用程序㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂。
機器學習使用稱為特征選擇的過程來選擇相關特征用于機器學習模型和系統的構建☧☬☸✡♁✙♆。,、':∶;。在這個特定的項目中ⓣⓤⓥⓦⓧⓨⓩ,其中之一可以在 Stanford Parser 包中找到的解析器稱為佩恩樹庫❣❦❧♡۵。使用 Penn Treebank 訓練解析器可以讓它學習一組語法注釋數據并構建機器學習模型☈⊙☉℃℉❅。解析器將是能夠根據訓練的數據創建句子的解析樹✵✶✷✸✹✺✻✼❄❅。從這個項目中獲得的統計數據可能被用作特征選擇的一部分NLP 應用程序中的過程①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯。統計數據可以用作不同作品的特征
并用于訓練機器學習系統⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓。
基于Drupal的NLP實現思路
本Drupal項目剛開始是直接使用了Node的原始文本數據ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,但是后來✵✶✷✸✹✺✻✼❄❅,我們將文本數據喂給了NLPStats Python 程序以便能調用到NLTK㈠㈡㈢㈣㈤㈥㈦,該模塊的總體架構相對簡單㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,大部分功能由 NLPStats 程序完成ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,這模塊實現hook✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴,從數據庫中提取節點內容㈠㈡㈢㈣㈤㈥㈦,然后去除HTML 標簽☈⊙☉℃℉❅,并將其輸出到一個臨時文本文件♦☜☞☝✍☚☛☟✌✽✾✿❁❃,該模塊然后調用 PHP shell_exec 命令執行 Python 并運行 NLPStats 程序⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯, NLPStats 程序接受臨時文本文件和其他參數⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,使用 NLTK對文本進行統計分析☈⊙☉℃℉❅。
與此同時①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯,它還將文本內容傳遞給 Stanford Parser ㈠㈡㈢㈣㈤㈥㈦,它生成文本中每個句子的解析樹⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ, Stanford Parser 的結果然后返回到 NLPStats 并編譯成其余的分析結果ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ。然后將分析輸出到模塊讀取的臨時文本文件웃유ღ♋♂,模塊將節點內容連同分析結果一起返回到 Drupal 以顯示在網頁上❻❼❽❾❿⓫⓬⓭⓮⓯⓰,具體的架構如下圖所示:

數據處理實例
在目前的狀態下❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣,該項目能夠分析和輸出大約 17 種不同的特征文本♀☿☼☀☁☂☄,但是還有其他幾個特征仍然可以分析㈠㈡㈢㈣㈤㈥㈦,其中許多可以通過Stanford Parser 生成的解析樹來獲得❣❦❧♡۵。 目前的6個解析樹僅用于輸出給用戶的其中一個特征①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯。 特性可以分為三種不同的類型✺ϟ☇♤♧♡♢♠♣♥,包括文本的長度字符❣❦❧♡۵、單詞㈠㈡㈢㈣㈤㈥㈦、音節等的數量☧☬☸✡♁✙♆。,、':∶;,分析分析樹獲得的數據①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯,以及使用文本的長度計算可讀性度量ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ。

示例數據測試
為了了解這個項目的用處和潛在應用❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣,我們將比較兩個類似的文本⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ,肯尼迪的就職演說和 馬丁路德金的“我有一個夢想”的演講❻❼❽❾❿⓫⓬⓭⓮⓯⓰。 這些作品是比較的好例子⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,因為它們都是演講⒜⒝⒞⒟⒠⒡⒢⒣⒤,并在 1960 年代的同一時期發表☾☽❄☃。 他們也有相似之處肯尼迪的演講長度約為 1,300 字⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,“我有一個
夢想》的演講⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,長度約為 1,600 字✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴。 還有演講的內容雖然不完全相同☾☽❄☃,但在某些方面是相似的✵✶✷✸✹✺✻✼❄❅。
由于這兩個文本都是用來說而不是讀的☧☬☸✡♁✙♆。,、':∶;,所以有許多特征幾乎沒有變化⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,例如每個單詞的字符㈠㈡㈢㈣㈤㈥㈦、每個單詞的音節和元音每個字ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ。然而☾☽❄☃,在查看每個段落的單詞時存在明顯差異和每個句子的音節以及某些可讀性度量웃유ღ♋♂。肯尼迪的演講每段的字數較少㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,平均為 (49.25)❣❦❧♡۵,最大值為 (96)✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴,而馬丁的字數為平均 55.73☾☽❄☃,最大值 206☧☬☸✡♁✙♆。,、':∶;。然而⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ,肯尼迪的演講每句話的音節更多平均為 35.18웃유ღ♋♂,最大值為 112❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣,而馬丁的平均值為 27.11웃유ღ♋♂,最大值為 97ⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙ。
肯尼迪的演講的 Flesch-Kincaid 評分為 10.746☧☬☸✡♁✙♆。,、':∶;,而馬丁的演講評分為 8.659①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯。這個在演講的結構上表現出明顯的差異⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾。 肯尼迪有更長的句子包含
更多的單詞☈⊙☉℃℉❅,但是馬丁有更長的段落✵✶✷✸✹✺✻✼❄❅,包含更多的句子☈⊙☉℃℉❅,可以看兩篇演講就知道了⑰⑱⑲⑳⓪⓿❶❷❸❹❺。這也解釋了可讀性等級的差異⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,因為肯尼迪的演講每個句子的音節更多❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣,這些句子往往更復雜❻❼❽❾❿⓫⓬⓭⓮⓯⓰。經過使用這些數據♦☜☞☝✍☚☛☟✌✽✾✿❁❃,我們可以表征不同的作品并將這些表征用于不同的作者歸屬等應用程序⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾。


結論
使用 Drupal 系統的自動文本分析是一個易于使用的 NLP 工具❻❼❽❾❿⓫⓬⓭⓮⓯⓰,可以快速收集文檔的統計特征✺ϟ☇♤♧♡♢♠♣♥。 這種類型的工具可以用于多個作者歸屬和其他 NLP 相關機器學習系統等應用程序♦☜☞☝✍☚☛☟✌✽✾✿❁❃。
此外ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,除了NLTK✵✶✷✸✹✺✻✼❄❅,Drupal還可以集成更多AI文字工具⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,
Apache Stanbol☾☽❄☃,對應的Drupal 模塊 Auto Recommended Tags:
https://www.drupal.org/project/auto_recommended_tags
Apache OpenNLP , 對應的Drupal 模塊 Search API Solr NLP:
https://www.drupal.org/project/search_api_solr_nlp
所以⒜⒝⒞⒟⒠⒡⒢⒣⒤,作為內容存儲的CMS❻❼❽❾❿⓫⓬⓭⓮⓯⓰,Drupal本身集成第三方面文字處理模塊是比較容易的㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂。
更多資料可以參考我們之前的案例或者相關介紹文章웃유ღ♋♂,
1☧☬☸✡♁✙♆。,、':∶;、Drupal的AI功能模塊助力網站智能化
2웃유ღ♋♂、如何對音視頻內容進行審核以及如何AI審核☧☬☸✡♁✙♆。,、':∶;?
3♀☿☼☀☁☂☄、如何用開源的系統來構建知識庫平臺㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂?
4✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴、如何基于開源系統構建資料庫/文檔庫平臺
5☧☬☸✡♁✙♆。,、':∶;、如何建設在線展覽和多媒體展覽⑰⑱⑲⑳⓪⓿❶❷❸❹❺?