【问题标题】:how to divide a series of words into "N" chunks?如何将一系列单词分成“N”个块?
【发布时间】:2015-02-12 14:24:00
【问题描述】:

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

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

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

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

示例: 输入 : N = 2 单词 = [....]

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

换句话说,我想按字典顺序划分我的单词

【问题讨论】:

  • 你能添加一小部分输入和预期输出吗,不完全清楚你想要什么。
  • @PadraicCunningham 我试图更清楚

标签: python nlp information-retrieval inverted-index


【解决方案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 个块没有平均分配到单词列表的长度时,您将不得不处理这种情况。

【讨论】:

    【解决方案2】:

    您可以使用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 的第二个和第三个参数将它们包装到函数中,

    【讨论】:

    • @PadraicCunningham 他想将一组数据分成块,这是一个想法如何做到这一点
    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2015-03-28
    • 2012-05-28
    • 2021-11-11
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多