假设您有一个像这样的文本文件:http: //www.gutenberg.org/files/17921/17921-8.txt
有没有人有一个好的算法或开源代码来从文本文件中提取单词?如何获取所有单词,同时避免特殊字符,并保留“it's”等内容......
我在 Java 中工作。谢谢
假设您有一个像这样的文本文件:http: //www.gutenberg.org/files/17921/17921-8.txt
有没有人有一个好的算法或开源代码来从文本文件中提取单词?如何获取所有单词,同时避免特殊字符,并保留“it's”等内容......
我在 Java 中工作。谢谢
这听起来像是正则表达式的正确工作。如果您不知道如何开始,这里有一些 Java 代码可以给您一个想法:
String input = "Input text, with words, punctuation, etc. Well, it's rather short.";
Pattern p = Pattern.compile("[\\w']+");
Matcher m = p.matcher(input);
while ( m.find() ) {
System.out.println(input.substring(m.start(), m.end()));
}
该模式[\w']+
多次匹配所有单词字符和撇号。示例字符串将逐字打印。查看Java Pattern 类文档以了解更多信息。
这是解决问题的好方法:此函数接收您的文本作为输入,并返回给定文本中所有单词的数组
private ArrayList<String> get_Words(String SInput){
StringBuilder stringBuffer = new StringBuilder(SInput);
ArrayList<String> all_Words_List = new ArrayList<String>();
String SWord = "";
for(int i=0; i<stringBuffer.length(); i++){
Character charAt = stringBuffer.charAt(i);
if(Character.isAlphabetic(charAt) || Character.isDigit(charAt)){
SWord = SWord + charAt;
}
else{
if(!SWord.isEmpty()) all_Words_List.add(new String(SWord));
SWord = "";
}
}
return all_Words_List;
}
伪代码如下所示:
create words, a list of words, by splitting the input by whitespace
for every word, strip out whitespace and punctuation on the left and the right
python代码将是这样的:
words = input.split()
words = [word.strip(PUNCTUATION) for word in words]
在哪里
PUNCTUATION = ",. \n\t\\\"'][#*:"
或您要删除的任何其他字符。
我相信 Java 在 String 类中有等效的功能:String .split() 。
在您在链接中提供的文本上运行此代码的输出:
>>> print words[:100]
['Project', "Gutenberg's", 'Manual', 'of', 'Surgery', 'by', 'Alexis',
'Thomson', 'and', 'Alexander', 'Miles', 'This', 'eBook', 'is', 'for',
'the', 'use', 'of', 'anyone', 'anywhere', 'at', 'no', 'cost', 'and',
'with', 'almost', 'no', 'restrictions', 'whatsoever', 'You', 'may',
'copy', 'it', 'give', 'it', 'away', 'or', 're-use', 'it', 'under',
... etc etc.
基本上,你想匹配
([A-Za-z])+('([A-Za-z])*)?
对?
您可以尝试正则表达式,使用您制作的模式,并计算找到该模式的次数。