您好我一直在尝试使用boost库tokenizer类来使用tokenizer.我在boost文档中找到了这个教程:
http://www.boost.org/doc/libs/1 _36 _0/libs/tokenizer/escaped _list _separator.htm
问题是我不能让参数逃脱_list _separator("","","");
但如果我修改boost/tokenizer.hpp文件就可以了.但那并不是理想的解决方案,想知道是否有任何我想要的东西,以便在转义的_list _separator中获得不同的参数.
我想把它拆分为空格,用"和"表示转义,并且在引用的字符串中没有转义字符.
这用于在游戏控制台系统中进行参数解析系统.
include <iostream>
include <boost/tokenizer.hpp>
include <string>
int main()
{
using namespace std;
using namespace boost;
string s = "exec script1 \"script argument number one\"";
string separator1("");//dont let quoted arguments escape themselves
string separator2(" ");//split on spaces
string separator3("\"\'");//let it have quoted arguments
tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)> tok(s);
for(tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)>::iterator beg=tok.begin(); beg!=tok.end();++beg)
{
cout << *beg << "\n";
}
}
visual studio 2005的错误是错误C2974:'boost :: tokenizer':'TokenizerFunc'的模板参数无效,类型预期
编辑:这个问题由ferrucio认可,并由彼得谢谢的所有人解释.
我如何从输入字符串解析标记.例如:
char *aString = "Hello world".
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
"你好,世界"
我有一个守护进程,它读取配置文件以便知道在哪里写东西.在配置文件中,存在如下行:
output = /tmp/foo/%d/%s/output
Run Code Online (Sandbox Code Playgroud)
或者,它可能看起来像这样:
output = /tmp/foo/%s/output/%d
Run Code Online (Sandbox Code Playgroud)
......或者只是这样:
output = /tmp/foo/%s/output
Run Code Online (Sandbox Code Playgroud)
......或者最后:
output = /tmp/output
Run Code Online (Sandbox Code Playgroud)
我在程序中将该行作为cfg-> pathfmt.我现在要做的是想出一些巧妙的使用方法.
再解释一下,路径最多可以包含两个要格式化的组件.%d将作为作业ID(int)扩展,%s将作为作业名称(字符串)扩展.用户可能希望在配置文件中使用一个,两个或不使用.在我最终将它传递给snprintf()之前,我需要知道他们想要什么,以什么顺序.我可以把它缩小范围,但我一直想和strtok()谈谈,这看起来很难看.
我希望为用户提供这种灵活性,但是我正在寻找一种合理,便携的方式来实现它.对于如何开始搜索这个问题,我也完全失败了.
如果符合以下条件,我会非常高兴:
我不希望为我编写代码,我只是坚持(我认为)应该是非常简单的东西,并需要一些帮助第一口.我真的觉得我在思考并忽略了明显的东西.
最终结果应该是这样的布尔函数:
bool output_sugar(const char *fmt, int jobid, const char *jobname, struct job *j);
Run Code Online (Sandbox Code Playgroud)
然后它将在j-> outpath上调用snprintf()(明智地),如果某种垃圾(即%后跟不是s,d或%的东西)在配置行(或其null)中则返回false.完整性检查很容易,我只是有点时间获取格式正确的参数的数量(和顺序).
提前致谢.此外,如果您有这样的声誉,请随时编辑此标题,正如我所说,我不太确定如何在一行中提出问题.我认为我需要的是一个解析器,但使用一个完整的词法分析器/解析器处理一个简单的字符串感觉很尴尬.
有人知道 smalltalk 中字符串的换行符是什么吗?
我试图在单独的行中拆分一个字符串,但我无法弄清楚 smalltalk 中的换行符是什么。
IE。
string := 'smalltalk is
a lot of fun.
ok, it's not.'
I need to split it in:
line1: smalltalk is
line2: a lot of fun.
line3: ok, it's not.
Run Code Online (Sandbox Code Playgroud)
我可以根据任何字母或符号拆分一行,但我无法弄清楚换行符是什么。
好的,这里是我如何根据逗号拆分字符串,但我不能根据新行进行拆分。
假设我有一个包含换行符和制表符的长字符串:
var x = "This is a long string.\n\t This is another one on next line.";
Run Code Online (Sandbox Code Playgroud)
那么我们如何使用正则表达式将此字符串拆分为标记?
我不想使用,.split(' ')因为我想学习Javascript的正则表达式.
一个更复杂的字符串可能是这样的:
var y = "This @is a #long $string. Alright, lets split this.";
Run Code Online (Sandbox Code Playgroud)
现在我只想从这个字符串中提取有效单词,没有特殊字符和标点符号,即我想要这些:
var xwords = ["This", "is", "a", "long", "string", "This", "is", "another", "one", "on", "next", "line"];
var ywords = ["This", "is", "a", "long", "string", "Alright", "lets", "split", "this"];
Run Code Online (Sandbox Code Playgroud) 寻找有关如何为搜索标记文本的策略,以及如何实现它们的一些想法.
具体来说,我们正在尝试将用户生成的业务审核标记为有助于我们的业务搜索引擎.所有代码都是Python.
我想我们至少需要做以下几点:
将复数名词转换为单数
我发现了一个名为inflect的图书馆似乎做得很好,有没有人有任何经验呢?
摆脱所有非字母数字字符
这似乎是我的正则表达式的工作,但我很想听到任何其他建议
Tokenize基于空格,将连续的空格转换为单个空格
我认为这对于Python中的一些自定义字符串操作是可行的,但可能有更好的方法.
有没有人对我需要做的事情有任何其他想法来标记文本?另外,您对实施上述策略所提及的技术和工具有何看法?
背景信息 :(从评论到Dough T关于Solr或Elastic搜索的建议)
我们正在使用ElasticSearch,我们使用它的工具进行基本标记化.我们想要单独进行上面描述的标记化,因为在标记化之后,我们将需要应用一些非常复杂的语义分析来从文本中提取意义.我们希望灵活地准确地标记我们如何指定,以及使用我们自己的数据注释附加到我们自己的格式存储令牌的便利性.
我们绝对需要的一件事是每个令牌的单个(大)数据库记录,可以随时访问和修改,其中包含与该令牌的使用相关的所有内容.我认为,当文档被索引时,排除仅使用ES标记化来处理它们.我们可以使用ES的分析模块来分析文本而不对其进行索引,然后单独处理每个令牌以构建/更新令牌的数据库记录......我们寻求有关此方法的建议.
一旦我看到一个例子,这可能非常简单,但是我如何推广boost :: tokenizer或boost :: split来处理由多个字符组成的分隔符?
例如,使用" _ _",这些标准拆分解决方案似乎都不起作用:
boost::tokenizer<boost::escaped_list_separator<string> >
tk(myString, boost::escaped_list_separator<string>("", "____", "\""));
std::vector<string> result;
for (string tmpString : tk) {
result.push_back(tmpString);
}
Run Code Online (Sandbox Code Playgroud)
要么
boost::split(result, myString, "___");
Run Code Online (Sandbox Code Playgroud) 我试图得到一个看似非常基本的Marpa语法工作.我使用的代码如下:
use strict;
use warnings;
use Marpa::R2;
use Data::Dumper;
my $grammar = Marpa::R2::Scanless::G->new(
{
source => \(<<'END_OF_SOURCE'),
:start ::= ExprSingle
ExprSingle ::= Expr AndExpr
Expr ~ word
AndExpr ~ word*
word ~ [\w]+
:discard ~ ws
ws ~ [\s]+
END_OF_SOURCE
}
);
my $reader = Marpa::R2::Scanless::R->new(
{
grammar => $grammar,
}
);
my $input = 'foo';
$reader->read(\$input);
my $value = $reader->value;
print Dumper $value;
Run Code Online (Sandbox Code Playgroud)
这打印$VAR1 = \'foo';.所以它认出一个字就好了.但我希望它能识别出一串词
my $input='foo bar'
Run Code Online (Sandbox Code Playgroud)
现在脚本打印:
Error in SLIF G1 read: Parse exhausted, …Run Code Online (Sandbox Code Playgroud) 我正在使用包含url的字段索引文档:
[
'myUrlField' => 'http://google.com/foo/bar'
]
Run Code Online (Sandbox Code Playgroud)
现在我想从弹性搜索中获得的是url字段上的聚合.
curl -XGET 'http://localhost:9200/myIndex/_search?pretty' -d '{
"facets": {
"groupByMyUrlField": {
"terms": {
"field": "myUrlField"
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
这是一切都很好,但默认分析仪的标记化领域,这样的网址的每一部分是一个道理,所以我得到安打http,google.com,foo和bar.但基本上我只对网址的主机名感兴趣google.com.
我可以使用构面按特定标记分组吗?
"field": "myUrlField.0"
Run Code Online (Sandbox Code Playgroud)
或类似的东西?
查询"not_analyzed"索引也不好,因为我想按主机名分组,而不是按唯一网址分组.
希望能够在elasticsearch中执行此操作,而不是在我的客户端代码中执行此操作.谢谢
我刚刚开始学习随机森林,所以如果这听起来很愚蠢,我很抱歉
我最近正在练习一揽子单词介绍:讨价还价 ,我想澄清一些事情:
使用vectorizer.fit_transform(" 清洁评论列表*上的*")
现在,当我们在火车评论上准备一堆单词数组时,我们在火车评论列表中使用了fit_predict,现在我知道fit_predict做了两件事,>首先它适合数据并知道词汇,然后它在每个上面生成向量审查.
因此,当我们使用vectorizer.transform(" 清洁列车评论列表 ")时, 这只是将测试评论列表转换为每个评论的向量.
我的问题是.....为什么不在 测试列表上使用fit_transform !! 我的意思是在文件中它说它会导致过度拟合,但等待它对我来说是否有意义使用它反正,让我给你我的预期:
当我们不使用fit_transform时,我们基本上是说使用最常用的火车评论词来制作测试评论的特征向量!! 为什么不使用测试中最频繁的单词来制作测试特征数组呢?
我的意思是随机关怀吗?如果我们给随机森林火车特征数组和训练特征情绪工作和训练自己,然后给它测试 特征数组不会只是给出它的情绪预测.
注意:我可能没有以正确的方式询问,但是当人们试图回答时,我会更新问题更清楚..