如何将一系列单词划分为“N”块?

时间:2014-12-14 09:28:34

标签: python nlp information-retrieval inverted-index

首先请原谅我的任何歧义。我发现我的问题有点难以用英语解释。 基本上我想要做的是,将一大堆单词划分为“N”部分。

例如,

读取文件中的所有单词,然后将它们分成N = 10个部分。 更准确地说,我正在从事数据挖掘项目。我需要对数千个文件进行排序。

说n = 2。我知道我可以把a-m和n-z放在一个文件中。我需要一种算法可以为n>做到这一点。 100。

PS:我的程序FIRST必须创建N个文件(或块)然后读取所有单词并根据它们的开始方式,将它们分配给其中一个块。

示例: 输入: N = 2 words = [....]

输出: [以a-m开头的单词],[以n-z开头的单词]

换句话说,我想用词典式划分词语

2 个答案:

答案 0 :(得分:1)

这是你想要的大致想法:

l = "i find my problem a bit hard to explain in English".split()
n = 2
ln = len(l)
chnk = ln / n
srt = sorted(l, key=str.lower) # use str.lower as the key or uppercase will come before lower
chunks = (srt[i:chnk+i] for i in xrange(0, len(srt), chnk))

In [4]: l = "i find my problem a bit hard to explain in English".split()
In [5]: n = 2    
In [6]: ln = len(l)
In [7]: chnk = ln / n    
In [8]: srt = sorted(l, key=str.lower)
In [9]: chunks = (srt[i:chnk+i] for i in xrange(0, len(srt), chnk))    
In [10]:     
In [10]: for chunk in chunks:
   ....:         print(chunk)
   ....:     
['a', 'bit', 'English', 'explain', 'find']
['hard', 'i', 'in', 'my', 'problem']
['to']

显然,当n个块没有均匀分配到单词列表的长度时,你将不得不处理这个案例。

答案 1 :(得分:-1)

您可以使用itertools

from itertools import islice

# islice('ABCDEFG', 2) --> A B
# islice('ABCDEFG', 2, 4) --> C D
# islice('ABCDEFG', 2, None) --> C D E F G
# islice('ABCDEFG', 0, None, 2) --> A C E G

your_dict=[1,2,3,4,5]
first_chunk=islice(your_dict,2) #--> 1 2
second_chunk=islice(your_dict,2,None) #--> 3 4 5

之后,您可以使用islice第二个和第三个参数播放函数,