NLP项目,python或C++; 我们正在研究阿拉伯语自然语言处理项目,我们限制了在Python或C++中编写代码(以及Boost库)。我们正在考虑以下几点:
蟒蛇NLP项目,python或C++; 我们正在研究阿拉伯语自然语言处理项目,我们限制了在Python或C++中编写代码(以及Boost库)。我们正在考虑以下几点:,c++,python,boost,nlp,C++,Python,Boost,Nlp,蟒蛇 比C++慢(正在进行的工作使Python更快) 更好的UTF8支持 编写测试和尝试不同算法的速度更快 C++ 比Python快 熟悉的代码,每个程序员都知道C或类似C的代码 项目完成后,将项目移植到其他编程语言应该不是很难 你认为什么更适合这个项目 熟悉的代码,每个程序员都知道C或类似C的代码 很多开发者都熟悉C或C类代码,并没有使它们符合C++的要求。 没有经验的C++开发人员会对这样一个复杂的项目造成很大的危害,你必须格外小心。 我不能代表python说话,但我听说它更适合初
- 更好的UTF8支持
- 编写测试和尝试不同算法的速度更快
- 比Python快
- 熟悉的代码,每个程序员都知道C或类似C的代码
<> P>强,我会说,你应该再次去了解你(作为团队)最了解的语言。/P>> P>用Python编写它,对它进行描述,如果你需要加速它的一部分,请用C++编写。Python和C++类似,C++的“熟悉”优势将很快就不相关了。 我把这个说成是一个主要用C++开发的,最近用Python得到了严肃的对待。我喜欢它们,但我可以让Python代码比C++运行得快很多。说真的,
dict
在可用性方面胜过了std::map
这里有一些尽管这是主观的和有争议的,但有证据表明你可以用类似python的语言编写一个成功的NLP项目。它们还具有:
(引用比较) NLP使用了许多编程语言。正如前言中所解释的,我们之所以选择Python,是因为我们相信它非常适合NLP的特殊要求。这里我们简要介绍几种编程语言,用于阅读文本并打印以ing结尾的单词。我们从Python版本开始,我们认为它是易于解释的,即使是非Python程序员:
import sys
for line in sys.stdin:
for word in line.split():
if word.endswith('ing'):
print word
[……]
C编程语言是一种高效的低级语言,广泛用于操作系统和网络软件:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
int i = 0;
int c = 1;
char buffer[1024];
while (c != EOF) {
c = fgetc(stdin);
if ( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ) {
buffer[i++] = (char) c;
continue;
} else {
if (i > 2 && (strncmp(buffer+i-3, "ing", 3) == 0 || strncmp(buffer+i-3, "ING", 3) == 0 ) ) {
buffer[i] = 0;
puts(buffer);
}
i = 0;
}
}
return 0;
}
#包括
#包括
int main(int argc,字符**argv){
int i=0;
int c=1;
字符缓冲区[1024];
而(c!=EOF){
c=fgetc(标准偏差);
如果((c>='0'&&c='a'&&c='a'&&c 2&&(strncmp(缓冲区+i-3,“ing”,3)==0 | | strncmp(缓冲区+i-3,“ing”,3)==0)){
缓冲区[i]=0;
放置(缓冲);
}
i=0;
}
}
返回0;
}
编辑:我没有在C++/Boost中包含可比较的代码,所以我添加了一个代码示例,它做了一些类似的事情,尽管与的不同。请注意,这不是最干净的版本
// char_sep_example_1.cpp
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>
int main()
{
std::string str = ";;Hello|world||-foo--bar;yow;baz|";
typedef boost::tokenizer<boost::char_separator<char> >
tokenizer;
boost::char_separator<char> sep("-;|");
tokenizer tokens(str, sep);
for (tokenizer::iterator tok_iter = tokens.begin();
tok_iter != tokens.end(); ++tok_iter)
std::cout << "<" << *tok_iter << "> ";
std::cout << "\n";
return EXIT_SUCCESS;
}
//char\u sep\u示例\u 1.cpp
#包括
#包括
#包括
int main()
{
std::string str=“;你好|世界| |-foo--bar;youw;baz |”;
typedef boost::标记器
标记器;
boost::字符分隔符sep(“-;|”);
标记器标记(str、sep);
for(tokenizer::iterator tok_iter=tokens.begin();
tok_iter!=tokens.end();++tok_iter)
Std::CUT> P>这或多或少是对Otto Almendinger的回答的一种补充。如果你真的想实现类似于他在C++中的Python例子的一些东西,我认为类似的事情会更接近:
#include <string>
#include <iostream>
int main() {
std::string temp;
while (std::cin>>temp)
if (temp.size()>2 && temp.substr(temp.size()-3, 3)=="ing")
std::cout << temp;
}
#包括
#包括
int main(){
std::字符串温度;
而(标准::cin>>温度)
如果(温度大小()>2&&temp.substr(温度大小()-3,3)=“ing”)
STD::CUTIMO,因为“熟悉”的因素,所以C/C++是简单的,虽然LOC的更多的是C/C++,但是在理解和测试方面节省了时间。对于算法开发和原型Python Win,
1是很简单的,如果需要的话,很容易将计算密集的部分移到C/C++模块中。C++已经有了惊人的执行力。但是,我们可能忽略了Python PROSS的这种情况。但是你的想法非常酷,很实用。@卡哈尔德:这是我们的经验。当然,我可以在FC++中快速地使用FFTW或MKL,但是我的代码中的95%不是代码> fft()。,它是决策、初始化和管理。这是大部分时间都改变的代码,而不是内部循环的东西。当我在Python中做这一部分时,我印象深刻的是它在我的应用程序中是如何慢得慢但实际上不是很慢,而开发速度要快得多。乌拉尔语言工具包中的点提升缺少Unicode库,因此您应该考虑Glibmm或其他UTF-8字符串和字符转换的实现,如果您选择在C++中执行它,您仍然可以找到其他的Boost工具(例如字符串算法)。不过很有用。@Dana the Sane:是的,这是一个很好的观点,但它太倾向于英语了,也许我们可以在完成项目后添加一些功能:)@Tronic感谢您澄清这一点,这对我们来说非常重要,但我们喜欢Boost中的内存管理。上面的+1直接适用于此问题并提供了其他信息。谢谢,如果您不发表评论就知道是谁-1告诉我的,我会很高兴,尽管此问题是关于python和C++/Boost的,此答案是关于python和C的。您可以写很多东西“C++ C++中的“清洁器等价物”,我非常感谢你的工作,如果我有第二个正确答案,我会给你:“Otto:我是你的早期投票,你的答案涵盖了很多我没有。有时人们只是打你的下注,不说为什么。这是恼人的,但没有什么大不了的。此外,我不是助推器专家,而是C++SOL。ution似乎没有做Python或C解决方案所做的事情…在
for (std::string temp; std::cin>>temp; )
temp.size()>2 && temp.substr(temp.size()-3, 3)=="ing" && std::cout << temp;