ollama_ner.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import requests
  2. # Ollama API 地址
  3. OLLAMA_URL = "http://localhost:11434/api/generate"
  4. def extract_triples(text):
  5. """
  6. 调用 DeepSeek 模型提取三元组信息
  7. :param text: 输入的文本
  8. :return: 提取的三元组列表
  9. """
  10. # 构造提示词,明确要求提取三元组
  11. prompt = f"""
  12. 请从以下文本中提取知识图谱的三元组信息,格式为 (实体1, 关系, 实体2)。
  13. 文本:{text}
  14. 请直接返回三元组,不要添加额外解释。
  15. """
  16. # 请求参数
  17. payload = {
  18. "model": "deepseek-r1", # 使用 DeepSeek 模型
  19. "prompt": prompt,
  20. "stream": False, # 一次性返回结果
  21. "options": {
  22. "temperature": 0.3, # 降低随机性,确保结果稳定
  23. "num_predict": 200 # 限制生成长度
  24. }
  25. }
  26. # 打印调试信息
  27. print("请求 URL:", OLLAMA_URL)
  28. print("请求参数:", payload)
  29. # 发送 POST 请求
  30. response = requests.post(OLLAMA_URL, json=payload)
  31. if response.status_code != 200:
  32. raise Exception(f"请求失败,状态码: {response.status_code}, 响应内容: {response.text}")
  33. # 解析响应
  34. result = response.json()
  35. output = result.get("response", "").strip()
  36. # 提取三元组
  37. triples = []
  38. for line in output.split("\n"):
  39. if line.startswith("(") and line.endswith(")"):
  40. triples.append(line.strip())
  41. return triples
  42. # 示例文本
  43. text = """
  44. 苹果公司由史蒂夫·乔布斯于1976年创立,总部位于加利福尼亚州库比蒂诺。
  45. 乔布斯是苹果公司的首席执行官,他推出了iPhone等革命性产品。
  46. """
  47. # 提取三元组
  48. try:
  49. triples = extract_triples(text)
  50. print("提取的三元组:")
  51. for triple in triples:
  52. print(triple)
  53. except Exception as e:
  54. print("发生错误:", e)