如何使用 Python 中的功能和库创建 n-gram的过程

 更新时间:2023年09月28日 14:14:37   作者:迹忆客  
在计算语言学中,n-gram 对于语言处理、上下文和语义分析非常重要,本文将讨论如何使用 Python 中的功能和库创建 n-gram,感兴趣的朋友一起看看吧

在计算语言学中,n-gram 对于语言处理、上下文和语义分析非常重要。它们是从令牌字符串中相邻的连续单词序列。

常见的 n-gram 包括 unigram、bigram 和 trigram,它们是有效的,当 n>3 时可能会遇到数据稀疏的问题。

本文将讨论如何使用 Python 中的功能和库创建 n-gram。

使用 for 循环在 Python 中从文本创建 n-gram

我们可以有效地创建一个 ngrams 函数,该函数接受文本和 n 值,并返回一个包含 n-gram 的列表。

为了创建这个函数,我们可以分割文本并创建一个空列表(output)来存储 n-gram。我们使用 for 循环遍历 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 中创建 n-gram

NLTK 是一个自然语言工具包,提供了一个易于使用的接口,用于文本处理和分词等重要资源。要安装 nltk,我们可以使用以下 pip 命令。

pip install nltk

为了展示潜在问题,让我们使用 word_tokenize() 方法。它可以帮助我们使用 NLTK 推荐的单词分词器创建一个令牌化的文本副本,然后再编写更详细的代码。

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.html

  Attempted 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'
    - ''
**********************************************************************

上述错误消息和问题的原因是 NLTK 库对于某些方法需要某些数据,而我们尚未下载这些数据,特别是如果这是您首次使用的话。因此,我们需要使用 NLTK 下载器来下载两个数据模块,punkt 和 averaged_perceptron_tagger。

当我们使用 words() 等方法时,可以使用这些数据,例如创建一个 Python 文件并运行以下代码以解决该问题。

import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

或者通过命令行界面运行以下命令:

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 come

The Trigrams of the Text are
well the money, the money has, money has finally, has finally come

到此这篇关于在 Python 中从文本创建 N-Grams的文章就介绍到这了,更多相关Python 文本创建 N-Grams内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python requests库参数提交的注意事项总结

    Python requests库参数提交的注意事项总结

    这篇文章主要给大家介绍了关于Python requests库参数提交的注意事项,文中通过示例代码和图片介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python PyPDF2模块安装使用解析

    Python PyPDF2模块安装使用解析

    这篇文章主要介绍了Python PyPDF2模块安装使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 如何在Anaconda中打开python自带idle

    如何在Anaconda中打开python自带idle

    这篇文章主要介绍了如何在Anaconda中打开python自带idle,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 基于Python实现用户管理系统

    基于Python实现用户管理系统

    这篇文章主要为大家详细介绍了基于Python实现用户管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • Python下的Mysql模块MySQLdb安装详解

    Python下的Mysql模块MySQLdb安装详解

    在Python环境下,如果想操作MySQL数据库,难免会调用相应的包,比如常用的:MySQLdb通过导入:import MySQLdb 后,可直接调用里面的方法
    2014-04-04
  • Python django框架应用中实现获取访问者ip地址示例

    Python django框架应用中实现获取访问者ip地址示例

    这篇文章主要介绍了Python django框架应用中实现获取访问者ip地址,涉及Python Request模块相关函数使用技巧,需要的朋友可以参考下
    2019-05-05
  • Python基于Pymssql模块实现连接SQL Server数据库的方法详解

    Python基于Pymssql模块实现连接SQL Server数据库的方法详解

    这篇文章主要介绍了Python基于Pymssql模块实现连接SQL Server数据库的方法,较为详细的分析了pymssql模块的下载、安装及连接、操作SQL Server数据库的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • Python机器学习应用之基于BP神经网络的预测篇详解

    Python机器学习应用之基于BP神经网络的预测篇详解

    BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络模型之一
    2022-01-01
  • 在python中利用opencv简单做图片比对的方法

    在python中利用opencv简单做图片比对的方法

    今天小编就为大家分享一篇在python中利用opencv简单做图片比对的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • PyTorch中的C++扩展实现

    PyTorch中的C++扩展实现

    这篇文章主要介绍了PyTorch中的C++扩展实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04

最新评论