java - java-定义单词的全文倒排索引
问题描述
我正在研究一个简单的全文倒排索引,试图建立一个从 PDF 文件中提取的单词索引。我正在使用 PDFBox 库来实现这一点。
但是,我想知道如何定义要索引的单词的定义。我的索引工作方式是将每个带有空格的单词定义为单词标记。例如,
This string, is a code.
在这种情况下:索引表将包含
This
string,
is
a
code.
这里的缺陷是 like string,
,它带有一个逗号,我认为string
它就足够了,因为没有人搜索string,
或code.
回到我的问题,是否有一个特定的规则可以用来定义我的单词令牌,以防止我所拥有的这种问题?
代码:
File folder = new File("D:\\PDF1");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles) {
if (file.isFile()) {
HashSet<String> uniqueWords = new HashSet<>();
String path = "D:\\PDF1\\" + file.getName();
try (PDDocument document = PDDocument.load(new File(path))) {
if (!document.isEncrypted()) {
PDFTextStripper tStripper = new PDFTextStripper();
String pdfFileInText = tStripper.getText(document);
String lines[] = pdfFileInText.split("\\r?\\n");
for(String line : lines) {
String[] words = line.split(" ");
for (String word : words) {
uniqueWords.add(word);
}
}
}
} catch (IOException e) {
System.err.println("Exception while trying to read pdf document - " + e);
}
}
}
解决方案
如果您想删除所有标点符号,您可以这样做:
for(String word : words) {
uniqueWords.add(word.replaceAll("[.,!?]", ""));
}
它将替换所有句点、逗号、感叹号和问号。
如果您还想摆脱引号,您可以这样做:
uniqueWords.add(word.replaceAll("[.,?!\"]", "")
推荐阅读
- django - 如何在elasticsearch中同时搜索单词的单复数形式?
- android - Uiautomator 中两次单击的时间差
- amazon-web-services - 如何仅从 lambda 节点 js 中的电子邮件中提取名称
- deep-learning - 如何决定在样式迁移中使用哪些层来处理内容和样式丢失?
- javascript - 使用 async/await 等待数据到达数组
- android - Mapbox 地图不起作用。只有一个蓝色圆圈
- string - 拆分字符串中的每个字符。VBA.net
- python - 试图得到平方和
- nginx - 如何在 Kubernetes (ACE) 中启用 nginx 入口控制器的遥测以获取应用程序洞察力?
- python - 通过在追加新行的同时替换旧数据来将新数据合并到旧数据中