前几天接到一个自动标注的活,基本上都是文本处理,首先想到的是具有强大文本处理能力的perl,但是苦于对perl的粗浅了解,不能保证程序的健壮,于是硬着头皮用自己比较熟悉的c++来处理。
首先碰见的自然是正则的问题,但是也找到了一些比较好的解决方案,例如:
class IsShengmu
{
public:
bool operator()(char val)
{
return//=========================声母表(ch,sh,zh,由组合产生)============================
(
(val == 'f')||( val == 'g')||( val == 'h')|| (val == 'j')||( val == 'k')||
(val == 'l')||( val == 'm')||( val == 'n')|| (val == 'p')||( val == 'q')||
(val == 'r')||( val == 's')||( val == 't')|| (val == 'w')||( val == 'x')||
(val == 'y')||( val == 'z')||( val == 'b')|| (val == 'c')||( val == 'd')
)? false : true;
}
};
这个是找出中文声母的谓语表达式,用这个简单的谓语表达式很轻松的就能区分汉语中所有的声韵母,这个东西也许用perl或者patyon之类的能更好更快更强的解决,但是我还是喜欢这种有点面对底层的感觉,几个谓语表达式轻松搞定正则。
由于现在的c++的STL技术,关联数组之类的也能够很轻松的解决。
由此观之,嗯,c++面对正则也不是那么的疲软和无力,是么~
P.S.
由于在写这个程序的时候用到了很多的指针,也用到了很多的迭代器,经常性的需要求上一个或者下一个对象的值,对此,应当保证所有需要使用的指针或者迭代器都指向当前的位置,在迫不得已的情况下进行了自增或者自减操作之后,一定要确保指针或者迭代器指回当前的位置,这对于计算速度可能是一种很小很小甚至可以忽略不计的影响,但是绝对降低程序出错的概率。