elasticsearch安装与使用(2)-基于term匹配的简单搜索引擎搭建 ...

打印 上一主题 下一主题

主题 378|帖子 378|积分 1134

把一篇pdf论文解析后,放入es数据库中,建立倒排索引表,并实现简单搜索。
1、pdf论文解析(英文)

安装pdf解析包
  1. pip install pdfminer.six
复制代码
  1. def extract_text_from_pdf(filename, page_numbers=None, min_line_length=1):
  2.     '''
  3.     从pdf文件中提取文字
  4.     :param filename: pdf文件
  5.     :param page_numbers: 指定页码,list
  6.     :param min_line_length: 文本最小分隔长度
  7.     :return:
  8.     '''
  9.     paragraphs = []
  10.     buffer = ''
  11.     full_text = ''
  12.     # 提取全部文本
  13.     for i, page_layout in enumerate(extract_pages(filename)):
  14.         if page_numbers is not None and i not in page_numbers:
  15.             continue
  16.         for element in page_layout:
  17.             if isinstance(element, LTTextContainer):
  18.                 full_text += element.get_text() + '\n'
  19.         # 按空行分隔,将文本重新组织成段落
  20.         lines = full_text.split('\n')
  21.         for text in lines:
  22.             if len(text) >= min_line_length:
  23.                 buffer += (' ' + text) if not text.endswith('-') else text.strip('-')
  24.             elif buffer:
  25.                 paragraphs.append(buffer)
  26.                 buffer = ''
  27.         if buffer:
  28.             paragraphs.append(buffer)
  29.     return paragraphs
复制代码
2、关键字提取

nltk安装见nltk安装与使用
  1. import re
  2. from nltk.stem import PorterStemmer
  3. from nltk.tokenize import word_tokenize
  4. from nltk.corpus import stopwords
  5. def keywords(text):
  6.     '''
  7.     提取文本关键字(简化版)
  8.     :param text: 一段字符串
  9.     :return:
  10.     '''
  11.     # 提取所有字母数字,并替换所有非字母数字的字符为空格
  12.     no_symbols = re.sub(r'[^a-zA-Z0-9\s]', ' ', text)
  13.     # 分词
  14.     word_tokens = word_tokenize(no_symbols)
  15.     # 去停用词
  16.     stop_words = set(stopwords.words('english'))
  17.     filtered_words = [w for w in word_tokens if not w.lower() in stop_words]
  18.     # 取词根
  19.     ps = PorterStemmer()
  20.     key_words = [ps.stem(w) for w in filtered_words]
  21.     return ' '.join(key_words)
复制代码
3、创建Elasticsearch毗连,注意添加证书

Elasticsearch安装见elasticsearch安装与使用(1)-使用docker安装Elasticsearch
  1. from elasticsearch import Elasticsearch, helpers
  2. # 创建Elasticsearch连接
  3. es = Elasticsearch(
  4.     hosts=['https://localhost:9200'],  # 服务地址与端口
  5.     basic_auth=("elastic", "N-sf6R*O0Ur344otTfzc"),  # 用户名,密码
  6.     ca_certs="/Users/sunwenjun/data/elastic8/http_ca.crt"  # 证书
  7. )
复制代码
4、建立倒排索引库

  1. def add_data_to_es(index_name="test_index", text_list=["text1","text2"]):
  2.     '''
  3.     建立索引,并往索引里添加数据
  4.     :param index_name: 定义索引名称
  5.     param paragraphs: 需要检索的文本列表  
  6.     :return:
  7.     '''
  8.     # 如果索引已存在,删除它
  9.     if es.indices.exists(index=index_name):
  10.         es.indices.delete(index=index_name)
  11.     # 创建索引
  12.     es.indices.create(index=index_name)
  13.     # 灌库指令
  14.     actions = []
  15.     for text in text_list:
  16.         action = {
  17.             "_index": index_name,
  18.             "_source": {
  19.                 "keywords": keywords(text),
  20.                 "text": text
  21.             }
  22.         }
  23.         actions.append(action)
  24.     # 文本灌库
  25.     res = helpers.bulk(es, actions)
  26.     return res
  27. # 往es里添加数据
  28. index_name = "index_test"
  29. add_data_to_es(index_name, paragraphs)
复制代码
索引库可视化见elasticsearch安装与使用(3)-索引库可视化
5、实现搜索

  1. def search(index_name, query, top_n=3):
  2.     '''
  3.     查询
  4.     :param index_name:
  5.     :param query:
  6.     :param top_n:
  7.     :return:
  8.     '''
  9.     search_query = {
  10.         "match":
  11.             {"keywords": keywords(query)}
  12.     }
  13.     search_res = es.search(index=index_name, query=search_query, size=top_n)
  14.     results = [hit["_source"]["text"] for hit in search_res["hits"]["hits"]]
  15.     return results
  16. query = "retrieval "
  17. results = search(index_name, query, 5)
  18. for res in results:
  19.            print(res)
复制代码
5、完备代码

esdemo-01
参考

无需重新学习,使用 Kibana 查询/可视化 SLS 数据

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表