如何使用 Python 中的功能和庫(kù)創(chuàng)建 n-gram
在計(jì)算語(yǔ)言學(xué)中,n-gram 對(duì)于語(yǔ)言處理、上下文和語(yǔ)義分析非常重要。它們是從令牌字符串中相鄰的連續(xù)單詞序列。
常見(jiàn)的 n-gram 包括 unigram、bigram 和 trigram,它們是有效的,當(dāng) n>3 時(shí)可能會(huì)遇到數(shù)據(jù)稀疏的問(wèn)題。
本文將討論如何使用 Python 中的功能和庫(kù)創(chuàng)建 n-gram。
使用 for 循環(huán)在 Python 中從文本創(chuàng)建 n-gram
我們可以有效地創(chuàng)建一個(gè) ngrams 函數(shù),該函數(shù)接受文本和 n 值,并返回一個(gè)包含 n-gram 的列表。
為了創(chuàng)建這個(gè)函數(shù),我們可以分割文本并創(chuàng)建一個(gè)空列表(output)來(lái)存儲(chǔ) n-gram。我們使用 for 循環(huán)遍歷 splitInput 列表以遍歷所有元素。
然后將單詞(令牌)添加到 output 列表中。
def ngrams(input, num):
splitInput = input.split(' ')
output = []
for i in range(len(splitInput) - num + 1):
output.append(splitInput[i:i + num])
return output
text = "Welcome to the abode, and more importantly, our in-house exceptional cooking service which is close to the Burj Khalifa"
print(ngrams(text, 3))代碼輸出:
[['Welcome', 'to', 'the'], ['to', 'the', 'abode,'], ['the', 'abode,', 'and'], ['abode,', 'and', 'more'], ['and', 'more', 'importantly,'], ['more', 'importantly,', 'our'], ['importantly,', 'our', 'in-house'], ['our', 'in-house', 'exceptional'], ['in-house', 'exceptional', 'cooking'], ['exceptional', 'cooking', 'service'], ['cooking', 'service', 'which'], ['service', 'which', 'is'], ['which', 'is', 'close'], ['is', 'close', 'to'], ['close', 'to', 'the'], ['to', 'the', 'Burj'], ['the', 'Burj', 'Khalifa']]
使用 NLTK 在 Python 中創(chuàng)建 n-gram
NLTK 是一個(gè)自然語(yǔ)言工具包,提供了一個(gè)易于使用的接口,用于文本處理和分詞等重要資源。要安裝 nltk,我們可以使用以下 pip 命令。
pip install nltk
為了展示潛在問(wèn)題,讓我們使用 word_tokenize() 方法。它可以幫助我們使用 NLTK 推薦的單詞分詞器創(chuàng)建一個(gè)令牌化的文本副本,然后再編寫更詳細(xì)的代碼。
import nltk text = "well the money has finally come" tokens = nltk.word_tokenize(text)
代碼輸出:
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\SFTP\n-gram-two.py", line 4, in <module>
tokens = nltk.word_tokenize(text)
File "C:\Python310\lib\site-packages\nltk\tokenize\__init__.py", line 129, in word_tokenize
sentences = [text] if preserve_line else sent_tokenize(text, language)
File "C:\Python310\lib\site-packages\nltk\tokenize\__init__.py", line 106, in sent_tokenize
tokenizer = load(f"tokenizers/punkt/{language}.pickle")
File "C:\Python310\lib\site-packages\nltk\data.py", line 750, in load
opened_resource = _open(resource_url)
File "C:\Python310\lib\site-packages\nltk\data.py", line 876, in _open
return find(path_, path + [""]).open()
File "C:\Python310\lib\site-packages\nltk\data.py", line 583, in find
raise LookupError(resource_not_found)
LookupError:
**********************************************************************
Resource [93mpunkt[0m not found.
Please use the NLTK Downloader to obtain the resource:[31m>>> import nltk
>>> nltk.download('punkt')
[0m
For more information see: https://www.nltk.org/data.htmlAttempted to load [93mtokenizers/punkt/english.pickle[0m
Searched in:
- 'C:\\Users\\akinl/nltk_data'
- 'C:\\Python310\\nltk_data'
- 'C:\\Python310\\share\\nltk_data'
- 'C:\\Python310\\lib\\nltk_data'
- 'C:\\Users\\akinl\\AppData\\Roaming\\nltk_data'
- 'C:\\nltk_data'
- 'D:\\nltk_data'
- 'E:\\nltk_data'
- ''
**********************************************************************
上述錯(cuò)誤消息和問(wèn)題的原因是 NLTK 庫(kù)對(duì)于某些方法需要某些數(shù)據(jù),而我們尚未下載這些數(shù)據(jù),特別是如果這是您首次使用的話。因此,我們需要使用 NLTK 下載器來(lái)下載兩個(gè)數(shù)據(jù)模塊,punkt 和 averaged_perceptron_tagger。
當(dāng)我們使用 words() 等方法時(shí),可以使用這些數(shù)據(jù),例如創(chuàng)建一個(gè) Python 文件并運(yùn)行以下代碼以解決該問(wèn)題。
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')或者通過(guò)命令行界面運(yùn)行以下命令:
python -m nltk.downloader punkt python -m nltk.downloader averaged_perceptron_tagger
示例代碼:
import nltk text = "well the money has finally come" tokens = nltk.word_tokenize(text) textBigGrams = nltk.bigrams(tokens) textTriGrams = nltk.trigrams(tokens) print(list(textBigGrams), list(textTriGrams))
代碼輸出:
[('well', 'the'), ('the', 'money'), ('money', 'has'), ('has', 'finally'), ('finally', 'come')] [('well', 'the', 'money'), ('the', 'money', 'has'), ('money', 'has', 'finally'), ('has', 'finally', 'come')]
示例代碼:
import nltk
text = "well the money has finally come"
tokens = nltk.word_tokenize(text)
textBigGrams = nltk.bigrams(tokens)
textTriGrams = nltk.trigrams(tokens)
print("The Bigrams of the Text are")
print(*map(' '.join, textBigGrams), sep=', ')
print("The Trigrams of the Text are")
print(*map(' '.join, textTriGrams), sep=', ')代碼輸出:
The Bigrams of the Text are
well the, the money, money has, has finally, finally comeThe Trigrams of the Text are
well the money, the money has, money has finally, has finally come
到此這篇關(guān)于在 Python 中從文本創(chuàng)建 N-Grams的文章就介紹到這了,更多相關(guān)Python文本創(chuàng)建 N-Grams內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python工具dtreeviz決策樹(shù)可視化和模型可解釋性
這篇文章主要介紹了python工具dtreeviz決策樹(shù)可視化和模型可解釋性,決策樹(shù)是梯度提升機(jī)和隨機(jī)森林的基本構(gòu)建塊,在學(xué)習(xí)這些模型的工作原理和模型可解釋性時(shí),可視化決策樹(shù)是一個(gè)非常有幫助,下文相關(guān)資料,需要的小伙伴可任意參考一下2022-03-03
Python 實(shí)現(xiàn)Numpy中找出array中最大值所對(duì)應(yīng)的行和列
今天小編就為大家分享一篇Python 實(shí)現(xiàn)Numpy中找出array中最大值所對(duì)應(yīng)的行和列,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式
PyInstaller是一個(gè)十分有用的第三方庫(kù),通過(guò)對(duì)源文件打包,Python程序可以在沒(méi)有安裝Python的環(huán)境中運(yùn)行,也可以作為一個(gè)獨(dú)立文件方便傳遞和管理,下面這篇文章主要給大家介紹了關(guān)于Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式,需要的朋友可以參考下2022-04-04
python中把元組轉(zhuǎn)換為namedtuple方法
在本篇文章里小編給大家整理的是一篇關(guān)于python中把元組轉(zhuǎn)換為namedtuple方法,有興趣的朋友們可以參考下。2020-12-12
python中使用pymssql庫(kù)操作MSSQL數(shù)據(jù)庫(kù)
這篇文章主要給大家介紹了關(guān)于python中使用pymssql庫(kù)操作MSSQL數(shù)據(jù)庫(kù)的相關(guān)資料,最近在學(xué)習(xí)python,發(fā)現(xiàn)好像沒(méi)有對(duì)pymssql的詳細(xì)說(shuō)明,于是乎把官方文檔學(xué)習(xí)一遍,重要部分做個(gè)歸檔,方便以后查閱,需要的朋友可以參考下2023-08-08

