[英]java - omitting special characters from text extraction
我有一个程序,可以从PDF文件中提取文本或单词,然后将这些单词插入数据库中的表中。
在插入过程中,我有一个特殊的正则表达式来省略单词中是否存在特殊字符。 规则是,如果在单词前面或单词结尾处有特殊字符的单词被删除。
例:
Text : `,test.`
Token : `test`
Text: ?good
Token : good
Text: ?,.
Token:
Text: www.stack.com
Token: www.stack.com
只要字符之间没有空格,特殊字符就会保留。 至少这是我定义的方式。
这是我定义要存储的单词的定义的基本思想。 但是,当涉及到某些单词时,例如下划线:
Text: _
Token : Same as above
Text: _—,m‘—_
Token : same as above
下划线似乎没有被视为特殊字符。
我的代码:
String lines[] = text.split("\\r?\\n");
for (String line : lines) {
String[] words = line.split(" ");
System.out.println("Line: " + line);
preparedStatement = con1.prepareStatement(sql);
int i=0;
for (String word : words) {
// check if one or more special characters at end of string then remove OR
// check special characters in beginning of the string then remove
// insert every word directly to table db
word = word.replaceAll("([\\W]+$)|(^[\\W]+)", "");
preparedStatement.setString(1, path1);
preparedStatement.setString(2, word);
System.out.println("Token: " +word);
preparedStatement.executeUpdate();
}
}
有没有办法适当地忽略特殊字符或符号的每种可能组合?
\\ W的定义为[^a-zA-Z_0-9]
(请参阅Java Pattern API )。
因此,要获得没有下划线的相同行为,请将\\ W替换为[^a-zA-Z0-9]
您的代码行将是:
word = word.replaceAll("([^a-zA-Z_0-9]+$)|(^[^a-zA-Z_0-9]+)", "");
您可以使用以下内容替换所有特殊字符(空格除外)。
word = word.replaceAll("([ a-zA-Z0-9])", "");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.