标签: chunking

在Clojure中,懒惰的seqs总是变得笨拙吗?

我的印象是懒惰的seqs总是被分块.

=> (take 1 (map #(do (print \.) %) (range)))
(................................0)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样打印32个点,因为返回的lazy seq range被分成32个元素块.但是,当range我用自己的函数尝试这个时get-rss-feeds,懒惰的seq不再是分块的:

=> (take 1 (map #(do (print \.) %) (get-rss-feeds r)))
(."http://wholehealthsource.blogspot.com/feeds/posts/default")
Run Code Online (Sandbox Code Playgroud)

只打印了一个点,所以我猜测返回的lazy-seq get-rss-feeds没有分块.确实:

=> (chunked-seq? (seq (range)))
true

=> (chunked-seq? (seq (get-rss-feeds r)))
false
Run Code Online (Sandbox Code Playgroud)

以下是来源get-rss-feeds:

(defn get-rss-feeds
  "returns a lazy seq of urls of all feeds; takes an html-resource from the enlive library"
  [hr]
  (map #(:href (:attrs %))
       (filter #(rss-feed? (:type (:attrs %))) (html/select hr [:link])))
Run Code Online (Sandbox Code Playgroud)

因此,看起来粗糙取决于懒惰的seq是如何产生的.我偷看了函数的来源,range …

clojure lazy-evaluation chunking lazy-sequences

15
推荐指数
3
解决办法
2182
查看次数

如何避免Clojure对于我想要短路的懒惰seqs的分块行为?

我有一个漫长而懒惰的序列,我想减少并懒惰地测试.一旦两个连续元素彼此不相同=(或某些其他谓词),我想停止使用生产成本高昂的列表.是的,这听起来像是take-while,但请进一步阅读.

我想写一些简单而优雅的东西(假装一分钟every?就像这样reduce):

(every? = (range 100000000))
Run Code Online (Sandbox Code Playgroud)

但这不是懒惰的工作,所以它挂在无限的seqs.我发现这几乎和我想要的一样:

(apply = (range 100000000))
Run Code Online (Sandbox Code Playgroud)

但是,我注意到序列分块导致创建和测试额外的,不必要的元素.至少,这就是我认为这是在下面的代码中发生的事情:

;; Displays chunking behavior in groups of four on my system and prints 1 2 3 4
(apply = (map #(do (println %) %) (iterate inc 1)))

;; This prints 0 to 31
(apply = (map #(do (println %) %) (range)))
Run Code Online (Sandbox Code Playgroud)

我找到了一种解决方法take-while,并count检查所采用的元素数量,但这很麻烦.

我应该礼貌地向Rich Hickey建议他正确地进行了一些组合reduceevery?短路,还是我错过了一些已经存在的明显方法?

编辑:两种人发布了避免在懒惰序列上进行分块的解决方案,但是如何避免在进行分块时使用分块apply,这似乎在四个分组中消耗?

编辑#2:正如Stuart Sierra所说,我独立发现,这实际上并不是分块.它只是正常应用,所以我会把它叫做关闭并给他答案.对于那些感兴趣的人,我在一个单独的答案中包含了一个小函数来完成问题的减少部分.

clojure chunking lazy-sequences

14
推荐指数
1
解决办法
2678
查看次数

什么是自然语言处理中的一个组块?

有谁知道在文本处理的背景下什么是chunker以及它的用途是什么?

nlp chunking

13
推荐指数
2
解决办法
1万
查看次数

NLTK分块和走结果树

我正在使用NLTK RegexpParser从标记的标记中提取noungroups和verbgroups.

如何查看生成的树只查找NP或V组的块?

from nltk.chunk import RegexpParser

grammar = '''
NP: {<DT>?<JJ>*<NN>*}
V: {<V.*>}'''
chunker = RegexpParser(grammar)
token = [] ## Some tokens from my POS tagger
chunked = chunker.parse(tokens)
print chunked

#How do I walk the tree?
#for chunk in chunked:
#    if chunk.??? == 'NP':
#         print chunk
Run Code Online (Sandbox Code Playgroud)

(/ IN(NP载体/ NN)用于/ IN组织/ JJ和/ CC细胞培养/ JJ用于/ IN(NP/DT制备/ NN)/ IN(NP植入物/ NNS)和/ CC(NP植入物)/NN)(V包含/ VBG)(NP/DT载波/ NN)./.)

python text-parsing chunking nltk

13
推荐指数
1
解决办法
6297
查看次数

WCF分块/流媒体

我正在使用WCF并希望将大文件从客户端上传到服务器.我已调查并决定遵循http://msdn.microsoft.com/en-us/library/aa717050.aspx中列出的分块方法

但是,这种方法(就像流式传输一样)将合同限制为有限的方法签名:

[OperationContract(IsOneWay=true)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream);
Run Code Online (Sandbox Code Playgroud)

该示例使用了相当方便的示例,即从固定路径上载文件并将其保存到服务器上的固定路径.因此,我的问题是如何传递其他参数来指定文件名,文件路径等.

例如.我想要像:

[OperationContract(IsOneWay=true)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream, String filePath);
Run Code Online (Sandbox Code Playgroud)

马克,先谢谢你.

streaming wcf uploading chunking

12
推荐指数
2
解决办法
1万
查看次数

如何计算上传大文件的最佳块大小

是否存在处理大文件的最佳块大小?我有一个上传服务(WCF),用于接受几百兆字节的文件上传.

我已经尝试了4KB,8KB到1MB的块大小.较大的块大小有利于提高性能(更快的处理速度),但却以内存为代价.

那么,有没有办法在上传文件时计算出最佳的块大小.如何进行这样的计算呢?它是可用内存和客户端,CPU和网络带宽的组合,它决定了最佳尺寸吗?

干杯

编辑:可能应该提到客户端应用程序将处于silverlight状态.

c# asp.net silverlight wcf chunking

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

在第N次出现分隔符时拆分文件

在每第N次出现分隔符后,是否存在将文本文件拆分为多个块/块的单行内容?

示例:下面的分隔符是"+"

entry 1
some more
+
entry 2
some more
even more
+
entry 3
some more
+
entry 4
some more
+
...
Run Code Online (Sandbox Code Playgroud)

有几百万个条目,因此每次出现分隔符"+"时都要分开是一个坏主意.我想分开,例如,每隔50,000个分隔符"+"实例.

Unix命令"split"和"csplit"似乎没有这样做......

unix split file chunking

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

对于Google App Engine(java),如何在FetchOptions中设置和使用块大小?

我运行一个查询,它目前返回1400结果,因此我在日志文件中收到以下警告:

com.google.appengine.api.datastore.QueryResultsSourceImpl logChunkSizeWarning:此查询没有在FetchOptions中设置的块大小,并返回了超过1000个结果.如果此查询的结果集对此查询很常见,请考虑设置块大小以提高性能.

我找不到任何关于如何实际实现这个的例子,这里有关于python的问题,但是因为我使用java并且不理解python,我正在努力翻译它.

另外这个查询(下面)正在执行17226cpu_ms,这感觉太长了,我甚至无法想象如果我说5000个联系人需要在客户端搜索它们会发生什么(就像你使用googlemail联系人一样! )

我的代码是:

    int index=0;
    int numcontacts=0;
    String[][] DetailList;

    PersistenceManager pm = PMF.get().getPersistenceManager();


    try {
        Query query = pm.newQuery(Contact.class, "AdminID == AID");
        query.declareParameters("Long AID");
        query.setOrdering("Name asc");
        List<Contact> Contacts = (List<Contact>) query.execute(AdminID);
        numcontacts=Contacts.size();
        DetailList=new String[numcontacts][5];

        for (Contact contact : Contacts) 
        {
            DetailList[index][0]=contact.getID().toString();
            DetailList[index][1]=Encode.EncodeString(contact.getName());
            index++;
        }
    } finally {
        pm.close();
    }
    return (DetailList);
Run Code Online (Sandbox Code Playgroud)

我在这里找到了以下两个条目:

但实际上并未涉及有关如何实施或使用这些选项的任何细节.我猜它是一个服务器端进程,我猜你要设置某种循环来一次抓取一个块,但我该如何实际做到这一点?

  • 我是否在循环中调用查询?
  • 我怎么知道循环多少次?
  • 我只是检查第一个以小于块大小的条目数返回的块吗?

如果没有一个实际的例子,我是怎么想找到这样的东西呢?在我看来,这里的其他人似乎"只知道"该怎么做..!

抱歉,如果我没有以正确的方式提出问题,或者我只是一个愚蠢的新手,但我不知道还有什么可以解决这个问题!

java google-app-engine chunking google-cloud-datastore

10
推荐指数
1
解决办法
5341
查看次数

我可以关闭 create-react-app 分块机制吗?

我正在使用create-react-app.

我想知道是否有办法关闭内置在 react 脚本中的分块机制。问题是我需要修复在构建中创建的包的名称。

javascript chunking chunks reactjs create-react-app

10
推荐指数
5
解决办法
1万
查看次数

使用组合器将导管重新组装成更大的块

我正在尝试构造一个Conduit接收为输入ByteStrings(每个块大小约1kb)并生成ByteString512kb块的输出连接.

这看起来应该很简单,但是我遇到了很多麻烦,我尝试过的大多数策略只能成功地将块分成更小的块,我没有成功连接更大的块.

我开始尝试isolate,然后takeExactlyE最终conduitVector,但无济于事.最终我决定这个:

import qualified Data.Conduit               as C
import qualified Data.Conduit.Combinators   as C
import qualified Data.ByteString            as B
import qualified Data.ByteString.Lazy       as BL

chunksOfAtLeast :: Monad m => Int -> C.Conduit B.ByteString m BL.ByteString
chunksOfAtLeast chunkSize = loop BL.empty chunkSize
  where 
    loop buffer n = do
      mchunk <- C.await
      case mchunk of 
        Nothing -> 
          -- Yield last remaining bytes
          when (n < chunkSize) (C.yield buffer)
        Just chunk -> …
Run Code Online (Sandbox Code Playgroud)

haskell chunking conduit

9
推荐指数
1
解决办法
822
查看次数