标签: tokenize

valgrind抱怨在c做一个非常简单的strtok

嗨,我正在尝试通过将整个文件加载到char[]使用中来标记字符串fread.由于一些奇怪的原因,它并不总是有效,而valgrind在这个非常小的示例程序中抱怨.

给出类似的输入 test.txt

first
second
Run Code Online (Sandbox Code Playgroud)

以及以下方案

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>


//returns the filesize in bytes
size_t fsize(const char* fname){
  struct stat st ;
  stat(fname,&st);
  return st.st_size;
}

int main(int argc, char *argv[]){
  FILE *fp = NULL;
  if(NULL==(fp=fopen(argv[1],"r"))){
    fprintf(stderr,"\t-> Error reading file:%s\n",argv[1]);
    return 0;
  }
  char buffer[fsize(argv[1])];
  fread(buffer,sizeof(char),fsize(argv[1]),fp);
  char *str = strtok(buffer," \t\n");

  while(NULL!=str){
    fprintf(stderr,"token is:%s with strlen:%lu\n",str,strlen(str));
    str = strtok(NULL," \t\n");
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译像

gcc test.c -std=c99 -ggdb
Run Code Online (Sandbox Code Playgroud)

跑得像

./a.out …
Run Code Online (Sandbox Code Playgroud)

c c++ valgrind tokenize strtok

2
推荐指数
2
解决办法
1311
查看次数

SOLR中的EdgeNGramTokenizerFactory EdgeNGramFilterFactory有什么区别?

这两个过滤器有什么区别?他们似乎有同样的效果?

任何人都可以提供一些如何应用于某些文本的示例吗?

search solr tokenize full-text-indexing n-gram

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

如何以更干净的方式进行多个字符串替换? - Python

做多个string.replace的快速方法是什么?我正在尝试添加空格来缩短英语单词

he'll -> he 'll
he's -> he 's
we're -> we 're
we've -> we 've
Run Code Online (Sandbox Code Playgroud)

我也在之前和标点符号之间添加空格:

"his majesty" ->  " his majesty " 
his; majesty -> his ; majesty
Run Code Online (Sandbox Code Playgroud)

有更快更清洁的方法吗?这个目的有点太慢,但我一直这样做:

def removeDoubleSpace(sentence):
  sentence.replace("  ", " ")
  if "  " in sentence:
    removeDoubleSpace(sentence)

def prepro(sentence):
  sentence = sentence.replace(",", " ,")
  sentence = sentence.replace(";", " ; ")
  sentence = sentence.replace(":", " : ")
  sentence = sentence.replace("(", " ( ")
  sentence = sentence.replace("(", " ) ")
  sentence = sentence.replace("‘"," ‘ ") …
Run Code Online (Sandbox Code Playgroud)

python string whitespace replace tokenize

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

使用UIMA,Standford Core NLP

UIMA和StanfordNLP在操作流程之后产生输出,如果我们想要进行POS标记,那么在输入文本中首先进行标记化,然后进行POS标记.

我想使用UIMA的标记化,并在Standford CoreNLP的POS标记器中使用该标记.但是Standford CoreNLP的POS标签需要在POS标记之前运行标记器.

那么,是否可以在同一管道中使用不同的API?是否可以将UIMA tokenizer和Standford CoreNLP一起使用?

请帮忙.

nlp tokenize stanford-nlp uima opennlp

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

在Shopify Liquid中将字符串解析为令牌

我在Shopify元字段中具有以下字符串(“ my_str”):

a:3,b:1,c:2,d:2,e:2,f:2
Run Code Online (Sandbox Code Playgroud)

键是产品型号ID(缩写为a,b,c ...),数字是数量。

我需要将其解析为key:value对,以便可以执行以下操作:

{% assign my_str = collection.metafields.local.my_metafield %}
{% assign my_map = my_str | parse ???? %}

{% for product in collection.products %}
    {% assign temp_qty = 1 %}
    {% for pair in my_map %}
        {% if pair[0] == product.variants.first.id %}
          {% assign temp_qty = pair[1] %}
        {% endif %}
    {% endfor %}
    <input type="hidden"  id="abc-{{ forloop.index0 }}" value=temp_qty />
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我绝对不知道如何解析my_str。我也乐意接受有关最佳总体方法的建议。

parsing tokenize liquid shopify

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

NLTK Sentence Tokenizer,自定义句子开头

我正在尝试使用PunktSentenceTokenizerfrom nltk将文本拆分成句子。文本包含以项目符号开头的列表,但它们不会被识别为新句子。我试图添加一些参数,但没有用。还有其他方法吗?

下面是一些示例代码:

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters

params = PunktParameters()
params.sent_starters = set(['•'])
tokenizer = PunktSentenceTokenizer(params)

tokenizer.tokenize('• I am a sentence • I am another sentence')
['• I am a sentence • I am another sentence']
Run Code Online (Sandbox Code Playgroud)

python tokenize nltk python-3.x

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

在python中的文件行之间插入文本

我有一个我正在阅读的文件

fo = open("file.txt", "r")
Run Code Online (Sandbox Code Playgroud)

然后通过做

file = open("newfile.txt", "w")
file.write(fo.read())
file.write("Hello at the end of the file")
fo.close()
file.close()
Run Code Online (Sandbox Code Playgroud)

我基本上将文件复制到新文件,但也在新创建的文件末尾添加一些文本.我怎么能插入那条线,在由空行分隔的两条线之间?即:

line 1 is right here
                        <---- I want to insert here
line 3 is right here
Run Code Online (Sandbox Code Playgroud)

我可以通过分隔符\n来标记不同的句子吗?

python io insert tokenize writetofile

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

弹性搜索忽略 `token_chars`

我在 Mac 上使用 Elastic Search 1.7.1。

这是我的索引映射:

{
   "settings":{
      "analysis":{
         "filter":{
            "my_edgengram":{
               "max_gram":15,
               "token_chars":[
                  "letter",
                  "digit"
               ],
               "type":"edgeNGram",
               "min_gram":1
            },
         },
         "analyzer":{
            "stop_edgengram_analyzer":{
               "filter":[
                  "lowercase",
                  "asciifolding",
                  "stop",
                  "my_edgengram"
               ],
               "type":"custom",
               "tokenizer":"whitespace"
            }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

调试分析器:

$ curl -XGET 'http://localhost:9200/objects/_analyze?analyzer=stop_edgengram_analyzer&text=America,s&pretty=True'
{
  "tokens" : [
     ... skipped ...
  , {
    "token" : "america",
    "start_offset" : 0,
    "end_offset" : 9,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "america,",
    "start_offset" : 0,
    "end_offset" : 9,
    "type" : "word",
    "position" …
Run Code Online (Sandbox Code Playgroud)

tokenize analyzer n-gram elasticsearch

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

获取C中字符串的最后一个标记

我想要做的是给出一个输入字符串,我知道它的大小或标记的数量,能够打印它的最后一个标记.

例如:

char* s = "some/very/big/string";
char* token;

const char delimiter[2] = "/";

token = strtok(s, delimiter);

while (token != NULL) {
    printf("%s\n", token);
    token = strtok(NULL, delimiter);
}

return token;
Run Code Online (Sandbox Code Playgroud)

我希望我的回归

但我得到的是(null).任何解决方法?我在网上搜索过,似乎无法找到答案.至少对于C编程语言.

c tokenize strtok

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

修改 python nltk.word_tokenize 排除“#”作为分隔符

我正在使用 Python 的 NLTK 库来标记我的句子。

如果我的代码是

text = "C# billion dollars; we don't own an ounce C++"
print nltk.word_tokenize(text)
Run Code Online (Sandbox Code Playgroud)

我把这个作为我的输出

['C', '#', 'billion', 'dollars', ';', 'we', 'do', "n't", 'own', 'an', 'ounce', 'C++']
Run Code Online (Sandbox Code Playgroud)

符号;.#被认为是分隔符。有没有办法#从分隔符集中删除,比如如何+不是分隔符,因此C++显示为单个标记?

我希望我的输出是

['C#', 'billion', 'dollars', ';', 'we', 'do', "n't", 'own', 'an', 'ounce', 'C++']
Run Code Online (Sandbox Code Playgroud)

我想C#被视为一种象征。

python tokenize nltk

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