我最近添加了源文件解析到现有工具,该工具从复杂的命令行参数生成输出文件.
命令行参数变得如此复杂以至于我们开始允许它们作为一个被解析的文件提供,就像它是一个非常大的命令行一样,但语法仍然很尴尬.所以我添加了使用更合理的语法解析源文件的功能.
我使用flex 2.5.4 for windows为这个自定义源文件格式生成了tokenizer,并且它有效.但我讨厌代码.全局变量,奇怪的命名约定以及它生成的c ++代码非常糟糕.现有的代码生成后端粘在flex的输出上 - 我不使用yacc或bison.
我即将重新回到代码中,我想使用更好/更现代的工具.有谁知道的东西.
如果这是唯一可用的东西,我可能会使用刚生成标记化表的工具.
我正在为一个天真的布尔信息检索系统做更快的测试,我想使用awk,grep,egrep,sed或类似的东西和管道将文本文件拆分成单词并将它们保存到其他文件中,每行一个单词.示例我的文件cotains:
Hola mundo, hablo español y no sé si escribí bien la
pregunta, ojalá me puedan entender y ayudar
Adiós.
Run Code Online (Sandbox Code Playgroud)
输出文件应包含:
Hola
mundo
hablo
español
...
Run Code Online (Sandbox Code Playgroud)
谢谢!
我对以下内容进行了解释,但不确定如何在其中包含分隔符.
void Tokenize(const string str, vector<string>& tokens, const string& delimiters)
{
int startpos = 0;
int pos = str.find_first_of(delimiters, startpos);
string strTemp;
while (string::npos != pos || string::npos != startpos)
{
strTemp = str.substr(startpos, pos - startpos);
tokens.push_back(strTemp.substr(0, strTemp.length()));
startpos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, startpos);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个类或方法,它需要长达100多个单词和标记的字符串,删除用于IR系统的停用词和词干.
例如:
"那只肥胖的大猫,'我知道'你最有趣的家伙'给袋鼠......"
标记器将删除标点符号并返回ArrayList单词
停用词删除器会删除"the","to"等字样
词干将减少每个词的"根",例如"最有趣"会变得有趣
提前谢谢了.
默认情况下,GWT Place URL包含Place的简单类名(如"HelloPlace"),后跟冒号(:)和PlaceTokenizer返回的标记.
我的问题是如何将":"改为"/"?
我正在使用NLTK word_tokenizer将句子分成单词.
我想将这句话标记为:
??_????? ?? ?? ??? ?????? ???? ...???? ??? ???? ???? ????? ..????? ??? ???? ???? ???? ???
Run Code Online (Sandbox Code Playgroud)
我写的代码是:
import re
import nltk
lex = u" ??_????? ?? ?? ??? ?????? ???? ...???? ??? ???? ???? ????? ..????? ??? ???? ???? ???? ???"
wordsArray = nltk.word_tokenize(lex)
print " ".join(wordsArray)
Run Code Online (Sandbox Code Playgroud)
问题是该word_tokenize功能不会被单词拆分.相反,它按字母分割,以便输出为:
"? ? _ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? …Run Code Online (Sandbox Code Playgroud) 我正在使用nltk PunkSentenceTokenizer将文本标记为一组句子.但是,标记化器似乎不会将新段落或新行视为新句子.
>>> from nltk.tokenize.punkt import PunktSentenceTokenizer
>>> tokenizer = PunktSentenceTokenizer()
>>> tokenizer.tokenize('Sentence 1 \n Sentence 2. Sentence 3.')
['Sentence 1 \n Sentence 2.', 'Sentence 3.']
>>> tokenizer.span_tokenize('Sentence 1 \n Sentence 2. Sentence 3.')
[(0, 24), (25, 36)]
Run Code Online (Sandbox Code Playgroud)
我希望将新行视为句子的边界.无论如何要做到这一点(我也需要保存偏移量)?
我已经阅读了http://www.codeproject.com/KB/recipes/Tokenizer.aspx,我希望在我的主要内容中有最后一个示例(最后,在所有图表之前)"扩展分隔符谓词",但是我当我将token_list分配给向量时,不会获得与文章作者相同的输出标记,为什么?
如何将真实结果放入列表或向量中?我想要这个:
但我有类似的东西:
来源样本:
class extended_predicate
{
public:
extended_predicate(const std::string& delimiters)
: escape_(false),
in_bracket_range_(false),
mdp_(delimiters)
{}
inline bool operator()(const unsigned char c) const
{
if (escape_)
{
escape_ = false;
return false;
}
else if ('\\' == c)
{
escape_ = true;
return false;
}
else if ('"' == c)
{
in_bracket_range_ = !in_bracket_range_;
return true;
}
else if …Run Code Online (Sandbox Code Playgroud) 我有使用utf-8编码的文本文件,其中包含'ö','ü'等字符.我想解析这些文件的文本形式,但我无法让tokenizer正常工作.如果我使用标准的nltk标记器:
f = open('C:\Python26\text.txt', 'r') # text = 'müsli pöök rääk'
text = f.read()
f.close
items = text.decode('utf8')
a = nltk.word_tokenize(items)
Run Code Online (Sandbox Code Playgroud)
输出: [u'\ufeff', u'm', u'\xfc', u'sli', u'p', u'\xf6', u'\xf6', u'k', u'r', u'\xe4', u'\xe4', u'k']
Punkt tokenizer似乎做得更好:
f = open('C:\Python26\text.txt', 'r') # text = 'müsli pöök rääk'
text = f.read()
f.close
items = text.decode('utf8')
a = PunktWordTokenizer().tokenize(items)
Run Code Online (Sandbox Code Playgroud)
输出: [u'\ufeffm\xfcsli', u'p\xf6\xf6k', u'r\xe4\xe4k']
在我无法弄清楚的第一个令牌之前仍然有'\ ufeff'(不是我不能删除它).我究竟做错了什么?非常感谢.