java-定义单词的全文倒排索引

java-定义单词的全文倒排索引,java,pdfbox,Java,Pdfbox,我正在做一个简单的全文倒排索引,试图建立一个从PDF文件中提取的单词索引。我使用PDFBox库来实现这一点 然而,我想知道如何定义要索引的单词的定义。我的索引工作方式是定义每个带有空格的单词都是单词标记。比如说, This string, is a code. 在本例中:索引表将包含 This string, is a code. 这里的缺陷是针对像字符串,,它带有一个逗号,我认为字符串就足够了,因为没有人搜索字符串、或代码。 回到我的问题,有没有一个特定的规则,我可以用它来定义我的单词标记

我正在做一个简单的全文倒排索引,试图建立一个从PDF文件中提取的单词索引。我使用PDFBox库来实现这一点

然而,我想知道如何定义要索引的单词的定义。我的索引工作方式是定义每个带有空格的单词都是单词标记。比如说,

This string, is a code.
在本例中:索引表将包含

This
string,
is
a
code.
这里的缺陷是针对像
字符串,
,它带有一个逗号,我认为
字符串
就足够了,因为没有人搜索
字符串、
代码。

回到我的问题,有没有一个特定的规则,我可以用它来定义我的单词标记,以防止我所拥有的东西出现这种问题

代码:

File folder=新文件(“D:\\PDF1”);
File[]listOfFiles=folder.listFiles();
对于(文件:listOfFiles){
if(file.isFile()){
HashSet uniqueWords=新HashSet();
String path=“D:\\PDF1\\”+file.getName();
try(PDDocument document=PDDocument.load(新文件(路径)){
如果(!document.isEncrypted()){
PDFTextStripper tStripper=新的PDFTextStripper();
字符串pdfFileInText=tStripper.getText(文档);
字符串行[]=PdfileIntext.split(\\r?\\n”);
用于(字符串行:行){
String[]words=line.split(“”);
for(字符串字:字){
添加(单词);
}
}                            
}
}捕获(IOE异常){
System.err.println(“尝试读取pdf文档时出现异常-”+e);
}
}
}

如果要删除所有标点符号,可以执行以下操作:

for(String word : words) {
    uniqueWords.add(word.replaceAll("[.,!?]", ""));
}
它将替换所有句点、逗号、感叹号和问号


如果您还想删除引号,可以执行以下操作:

uniqueWords.add(word.replaceAll("[.,?!\"]", "")

对。您可以使用replaceAll方法删除非单词字符,如下所示:

uniqueWords.add(word.replaceAll("([\\W]+$)|(^[\\W]+)", "")); 

你为什么不把
换成
?@ScaryWombat你是什么意思?对不起,我对正则表达式的理解有点模糊。让我看看,单词是
字符串
字符串
有一个方法
replace
-所以用
,“
替换
”,“
”-这不是正则表达式。然后将其添加到您的列表中,我明白了,但这会与一些特殊情况相矛盾,例如有一个日期为2018年12月15日或f(x)=2x+3y的句子,考虑到它们不被空格分隔,最好将其分类为两个单词。逻辑是您的,在我的示例中,我所替换的是
逗号
它做了什么?但是,如果我的句子中包含say 11/2/2018,并且我希望它作为一个词作为一个整体,该怎么办。它将消除它,对吗?它将替换所有句号、逗号、感叹号和问号marks@Daredevil不,不会的。自己试试看:
System.out.println(“10/2/18.replaceAll(“[,!?]”,”)是否可以将其替换为“动物”以将其理解为动物?我也试着把它包括在内,但它不需要时间argument@Daredevil什么意思?将动物替换为什么?什么是\\W?我很困惑,但如果我有一个日期是2018年12月10日,我必须将整个日期包括在我的索引中,那么它会忽略我不想添加的“/”。我添加了排除,您可以在此部分[^/]中添加排除。因此,现在,它将删除所有非单词字符,除了[^/]部分中提供的字符。这是一个问题。如果我有动物。然后我会得到动物,这是很好的。但是如果我有69.4,我希望它是相同的形式,它会省略点,变成694,这样你可以检查这是一个日期还是一个数字。
uniqueWords.add(word.replaceAll("([\\W]+$)|(^[\\W]+)", ""));