我正在使用Boost :: Spirit将一些文本解析为结构.这需要使用BOOST_FUSION_ADAPT_STRUCT来解析文本并直接存储到结构中.我知道宏有两个参数:结构名称为第一个arg,所有结构成员为第二个参数.而我正在通过那些2.但我得到编译错误说,
error: macro "BOOST_FUSION_ADAPT_STRUCT_FILLER_0" passed 3 arguments, but takes just 2
Run Code Online (Sandbox Code Playgroud)
这是代码片段.如果您需要整个代码,请告诉我.
谢谢.
namespace client
{
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
struct Dir_Entry_Pair
{
std::string dir;
std::string value1;
std::pair<std::string, std::string> keyw_value2;
};
}
BOOST_FUSION_ADAPT_STRUCT(
client::Dir_Entry_Pair,
(std::string, dir)
(std::string, value1)
(std::pair< std::string, std::string >, keyw_value2))
Run Code Online (Sandbox Code Playgroud)
这是我试图解析的规则,
qi::rule<Iterator, Dir_Entry_Pair()> ppair = dir
>> '/'
>> entry
>> -(keyword >> entry);
Run Code Online (Sandbox Code Playgroud) 我正在寻找基于Java的Apache Tika框架的C/C++替代方案.具体来说,我在一个框架下搜索文件元数据和结构化文本提取.经过一些在线搜索和浏览,我最接近的是GNU libextractor和一堆单独的文件过滤器,解析文档以提取文本数据(pdftoext,xls2csv ..etc)
任何人都可以推荐一个与Apache的Tika相媲美的好库吗?
谢谢
我正在学习弹性mapreduce,并开始使用Amazon Tutorial Section中提供的Word Splitter示例(代码如下所示).该示例为所提供的所有输入文档中的所有单词生成字数.
但是我希望通过文件名获得Word Counts的输出,即仅在一个特定文档中的单词计数.由于字数的python代码从stdin获取输入,我如何判断哪个输入行来自哪个文档?
谢谢.
#!/usr/bin/python
import sys
import re
def main(argv):
line = sys.stdin.readline()
pattern = re.compile("[a-zA-Z][a-zA-Z0-9]*")
try:
while line:
for word in pattern.findall(line):
print "LongValueSum:" + word.lower() + "\t" + "1"
line = sys.stdin.readline()
except "end of file":
return None
if __name__ == "__main__":
main(sys.argv)
Run Code Online (Sandbox Code Playgroud) 我试图在我的Makefile中使用vpath,以避免为每个源文件添加目录名前缀.但我不能让它正常工作.
这是Makefile:
CC=gcc -Wall
vpath %.h include
vpath %.c src
all: main.c Event.o Macros.h
$(CC) $< Event.o -o test/a.out
Event.o: Event.c Event.h Macros.h
$(CC) -c $< -o $@
Run Code Online (Sandbox Code Playgroud)
该SRC目录被正确包括在内.即,通过gcc找到Event.c文件.但是Event.h和Macros都没有.我在gcc中遇到错误,说在编译Event.c时找不到这两个文件.
我尝试一次将C文件中的#include指令更改为每个.
#include "Event.h" /* doesnt work */
#include <Event.h> /* doesnt work */
#include "../include/Event.h" /* works */
Run Code Online (Sandbox Code Playgroud)
你能帮帮我解决这个问题吗?我真的想避免在每个源文件之前使用目录名,因为我的实际Makefile比这大.
在Racket中,我试图在"cond"语句中打印多个表达式,如下所示,
(let ((var `(make))
(exp '(1 2)))
(cond
[(number? 2) `(hi ,var)
`(bye ,exp)]))
Run Code Online (Sandbox Code Playgroud)
但只有"再见"声明被返回/打印在屏幕上.第一个"hi"根本没有被删除.我如何退回/打印两者?
c++ ×3
amazon-ec2 ×1
amazon-emr ×1
apache-tika ×1
boost ×1
boost-fusion ×1
c ×1
gcc ×1
java ×1
makefile ×1
mapreduce ×1
metadata ×1
python ×1
racket ×1
scheme ×1