相关疑难解决方法(0)

蟒蛇n克,四,五,六克?

我正在寻找一种将文本分成n-gram的方法.通常我会做类似的事情:

import nltk
from nltk import bigrams
string = "I really like python, it's pretty awesome."
string_bigrams = bigrams(string)
print string_bigrams
Run Code Online (Sandbox Code Playgroud)

我知道nltk只提供bigrams和trigrams,但有没有办法将我的文本分成4克,5克甚至100克?

谢谢!

python string nltk n-gram

115
推荐指数
7
解决办法
12万
查看次数

如何在python中计算skipgrams?

k skipgram是ngram,它是所有ngrams和每个(ki)skipgram的超集,直到(ki)== 0(包括0跳过克).那么如何在python中有效地计算这些跳过头文件呢?

以下是我尝试的代码,但它没有按预期执行:

<pre>
    input_list = ['all', 'this', 'happened', 'more', 'or', 'less']
    def find_skipgrams(input_list, N,K):
  bigram_list = []
  nlist=[]

  K=1
  for k in range(K+1):
      for i in range(len(input_list)-1):
          if i+k+1<len(input_list):
              nlist=[]
              for j in range(N+1):
                  if i+k+j+1<len(input_list):
                    nlist.append(input_list[i+k+j+1])

          bigram_list.append(nlist)
  return bigram_list

</pre>
Run Code Online (Sandbox Code Playgroud)

上面的代码无法正确呈现,但print find_skipgrams(['all', 'this', 'happened', 'more', 'or', 'less'],2,1)提供以下输出

[['this','发生','更多'],['发生','更多','或',['更多','或','更少'],['或','更少'',['less'],['发生','更多','或'],['更多','或','更少',['或','更少'],['更少'], ['减']]

此处列出的代码也没有给出正确的输出:https: //github.com/heaven00/skipgram/blob/master/skipgram.py

print skipgram_ndarray("你叫什么名字")给出:['什么,是','是,你的','你的名字','名字','什么,你的','是,名字']

名字是一个unigram!

python nlp n-gram language-model

20
推荐指数
3
解决办法
9342
查看次数

从大量.txt文件及其频率生成Ngrams(Unigrams,Bigrams等)

我需要在NLTK中编写一个程序,将一个语料库(大量的txt文件)分成unigrams,bigrams,trigrams,fourgrams和fivegrams.我已经编写了代码将我的文件输入到程序中.

输入是用英文写的300 .txt文件,我希望以Ngrams的形式输出,特别是频率计数.

我知道NLTK有Bigram和Trigram模块:http://www.nltk.org/_modules/nltk/model/ngram.html

但我不是那么先进,他们进入我的计划.

输入:txt文件不是单句

输出示例:

Bigram [('Hi', 'How'), ('How', 'are'), ('are', 'you'), ('you', '?'), ('?', 'i'), ('i', 'am'), ('am', 'fine'), ('fine', 'and'), ('and', 'you')] 

Trigram: [('Hi', 'How', 'are'), ('How', 'are', 'you'), ('are', 'you', '?'), ('you', '?', 'i'), ('?', 'i', 'am'), ('i', 'am', 'fine'), ('am', 'fine', 'and'), ('fine', 'and', 'you')]
Run Code Online (Sandbox Code Playgroud)

我的代码到目前为止:

from nltk.corpus import PlaintextCorpusReader
corpus = 'C:/Users/jack3/My folder'
files = PlaintextCorpusReader(corpus, '.*')
ngrams=2

def generate(file, ngrams):
    for gram in range(0, ngrams):
    print((file[0:-4]+"_"+str(ngrams)+"_grams.txt").replace("/","_"))


for file in files.fileids(): …
Run Code Online (Sandbox Code Playgroud)

python nltk

18
推荐指数
2
解决办法
4万
查看次数

在python中快速/优化N-gram实现

哪个ngram实现在python中最快?

我试图描述nltk的vs scott的zip(http://locallyoptimal.com/blog/2013/01/20/elegant-n-gram-generation-in-python/):

from nltk.util import ngrams as nltkngram
import this, time

def zipngram(text,n=2):
  return zip(*[text.split()[i:] for i in range(n)])

text = this.s

start = time.time()
nltkngram(text.split(), n=2)
print time.time() - start

start = time.time()
zipngram(text, n=2)
print time.time() - start
Run Code Online (Sandbox Code Playgroud)

[OUT]

0.000213146209717
6.50882720947e-05
Run Code Online (Sandbox Code Playgroud)

有没有更快的实现在python中生成ngrams?

python nlp information-retrieval nltk n-gram

11
推荐指数
1
解决办法
3858
查看次数

从大文本中提取 n 克

例如,我们有以下文本:

“Spark 是一个用于编写快速分布式程序的框架。Spark 解决了与 Hadoop MapReduce 类似的问题,但采用了快速的内存方法和简洁的函数式 API。......”

我需要这个文本的所有可能的部分,一字一字,然后两两,三三到五到五。像这样:

: ['Spark', 'is', 'a', 'framework', 'for', 'writing, 'fast', 'distributed', 'programs', ...]

twos : ['Spark is', 'is a', 'a framework', 'framework for', 'for writing' ...]

三:['Spark is a', 'is a framework', 'a framework for', 'framework for writing', 'for write fast', ...]

. . .

五:['Spark 是一个框架','是一个写作框架','一个快速写作的框架','一个快速分布式写作的框架',...]

请注意,要处理的文本是大文本(约 100GB)。我需要这个过程的最佳解决方案。可能应该并行处理多线程。

我不需要一次完整的列表,它可以流式传输。

python performance text-processing nlp bigdata

-2
推荐指数
1
解决办法
9468
查看次数