当前位置: 首页 > 面试题库 >

使用Python计算N克

胡飞鹏
2023-03-14
问题内容

我需要为包含以下文本的文本文件计算Unigram,BiGrams和Trigrams:

“囊性纤维化仅在美国就影响了30,000名儿童和年轻人。吸入盐水雾可以减少填充囊性纤维化患者气道的脓液和感染,尽管副作用包括令人讨厌的咳嗽症状和难闻的味道。这就是结论。发表在本周《新英格兰医学杂志》上的两项研究。

我从Python开始,并使用以下代码

#!/usr/bin/env python
# File: n-gram.py
def N_Gram(N,text):
NList = []                      # start with an empty list
if N> 1:
    space = " " * (N-1)         # add N - 1 spaces
    text = space + text + space # add both in front and back
# append the slices [i:i+N] to NList
for i in range( len(text) - (N - 1) ):
    NList.append(text[i:i+N])
return NList                    # return the list
# test code
for i in range(5):
print N_Gram(i+1,"text")
# more test code
nList = N_Gram(7,"Here is a lot of text to print")
for ngram in iter(nList):
print '"' + ngram + '"'

http://www.daniweb.com/software-development/python/threads/39109/generating-
n-grams-from-a-word

但是,当我希望从单词之间以CYSTIC和FIBROSIS或CYSTIC FIBROSIS进行操作时,它适用于单词中的所有n-
gram。有人可以帮我解决这个问题吗?


问题答案:

假设输入是一个包含空格的单词的字符串,例如x = "a b c d"可以使用以下函数(编辑:请参阅最后一个函数以获取更完整的解决方案):

def ngrams(input, n):
    input = input.split(' ')
    output = []
    for i in range(len(input)-n+1):
        output.append(input[i:i+n])
    return output

ngrams('a b c d', 2) # [['a', 'b'], ['b', 'c'], ['c', 'd']]

如果您希望将它们重新连接成字符串,则可以调用以下内容:

[' '.join(x) for x in ngrams('a b c d', 2)] # ['a b', 'b c', 'c d']

最后,这并不能将总和汇总,因此,如果输入为'a a a a',则需要将它们累加为字典:

for g in (' '.join(x) for x in ngrams(input, 2)):
    grams.setdefault(g, 0)
    grams[g] += 1

将所有这些放到一个最终函数中可以得出:

def ngrams(input, n):
   input = input.split(' ')
   output = {}
   for i in range(len(input)-n+1):
       g = ' '.join(input[i:i+n])
       output.setdefault(g, 0)
       output[g] += 1
    return output

ngrams('a a a a', 2) # {'a a': 3}


 类似资料:
  • 本文向大家介绍在Python程序中计算n + nn + nnn +…+ n(m次),包括了在Python程序中计算n + nn + nnn +…+ n(m次)的使用技巧和注意事项,需要的朋友参考一下 我们将编写一个程序,用Python计算以下系列。检查我们要编写的程序的示例输入和输出。 因此,我们将有两个数字,并且我们必须计算如上 生成的序列之和。请按照以下步骤实现输出。 算法 您必须创建一个通用

  • 问题内容: 我有以下代码。我知道我可以使用函数过滤掉少于频率计数的搭配。但是,在决定设置过滤频率之前,我不知道如何获取文档中所有n- gram元组(在我的情况下为bi-gram)的频率。如您所见,我正在使用nltk搭配类。 问题答案: 该功能有效

  • 是否有一种内置的方法来计算Python3十进制对象正确舍入的第n个根?

  • 问题内容: 我正在使用NLTK在语料库中搜索n- gram,但是在某些情况下会花费很长时间。我已经注意到,计算n元语法在其他软件包中并不罕见(显然,Haystack具有某些功能)。如果我放弃NLTK,这是​​否意味着可以以更快的方式在语料库中查找n- gram?如果是这样,我可以使用什么来加快速度? 问题答案: 由于您没有指明是想要单词级还是字符级的n-gram,因此我将假设前者,而不会失去一般性

  • 本文向大家介绍python计算N天之后日期的方法,包括了python计算N天之后日期的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python计算N天之后日期的方法。分享给大家供大家参考。具体如下: python计算N天之后的日期,可以自己写成一个函数,想得到几天后的日期都行 输出结果如下: 希望本文所述对大家的Python程序设计有所帮助。