在Python中将列表从文本拆分为ngram

2024-09-29 23:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须将一个文本文件拆分为列表中每个列表中特定数量的单词,可能最好在示例中显示。在

假设文本文件如下所示

"i am having a good day today"

我要写一个类似这样的函数

^{pr2}$

如果函数是这样的

ngrams.makeNGrams("ngrams.txt", 3)

#it should give out:

[[’i’,’am’,’having’],[’having’,’a’,’good’],[’good’,’day’,’today’]]

现在有人知道我该怎么处理这件事吗? 事先非常感谢


Tags: 函数txt示例列表数量todayam单词
3条回答

定义:

def ngrams(text, n):
    words = text.split()
    return [ words[i:i+n] for i in range(len(words)-n+1) ]

并使用:

^{pr2}$

我相信有一种更像Python的方式来做这件事。它不是一个函数(但应该很容易适应),而是一个程序。我想它符合你的规格:

import sys

num = int(sys.argv[1])

cad = "i am having a good day today"

listCad =  cad.split(" ")

listOfLists = []
i = 0
while i <= len(listCad) - num:
   listOfLists.append(listCad[i:i+num])
   i = i + (num - 1)

print listOfLists

我会这样做:

def ngrams(words, n):
    return zip(*(words[i:] for i in range(n)))

用法:

^{pr2}$

其思想是从原始列表生成n列表,第i个列表移动i。然后简单地zip将这些移位的列表放在一起并返回结果。在

n=3的可视化:

^{3}$

zip函数将相同索引中的元素缝合在一起,直到用尽最短的列表,从而产生所需的输出。在

相关问题 更多 >

    热门问题