编码解码网站

This commit is contained in:
DelLevin-Home
2026-01-28 21:36:52 +08:00
parent 4e0b07b032
commit b476404e34
8 changed files with 375 additions and 3 deletions

View File

@@ -1,139 +0,0 @@
import requests
import json
import re
import time # 导入 time 模块
# OLLAMA_BASE_URL = "http://127.0.0.1:11434/api/generate"
# OLLAMA_BASE_URL = "http://152.136.153.72:27009/api/generate"
def extract_tags_with_ollama_from_content(ollama_base_url,model, article_content, max_tags=10, min_length=2, max_length=6):
"""
使用本地 Ollama 大语言模型分析文章内容并提取关键词。
Args:
article_content (str): 输入的文章内容字符串。
max_tags (int): 希望返回的最大标签数量。
min_length (int): 关键词最小长度。
max_length (int): 关键词最大长度。
Returns:
list: 提取到的关键词/标签列表。
"""
if not article_content or not article_content.strip():
return {
'code': 0,
'message': 'success',
'data': {
'model': model,
'think': '警告:输入的文章内容为空或仅包含空白字符。',
'tags': [],
'consume': 0.0
}
}
# 2. 构建 Prompt
# 使用中文提示,更符合 qwen 模型的特点
prompt = f"""
请严格按照以下要求,从提供的文章内容中提取关键词。
文章内容:
{article_content}
要求:
- 提取最多 {max_tags} 个最能概括文章主旨和核心概念的关键词。
- 关键词必须来源于文章内容,准确反映文章主题。
- 每个关键词的长度必须在 {min_length}{max_length} 个字符之间。
- 输出格式为关键词1, 关键词2, 关键词3, ...
- 只输出关键词列表,不要有任何其他解释或前缀。
"""
# 记录开始时间
start_time = time.time()
# 3. 准备发送给 Ollama API 的 payload
payload = {
"model": model,
"prompt": prompt,
"system": "你是一个专门生成文章标签的助手,请你根据我给你的文章的内容总结并生成一系列的标签,格式可以参考[关键词1, 关键词2, 关键词3].你只需要给我生成这种形式的标签即可,其他分析内容无需输出.",
"stream": False,
"options": {
"top_p": 0.9,
"temperature": 0.1, # 较低的温度使输出更确定、更聚焦
"num_predict": 64000, # 控制预测的最大 token 数
}
}
try:
# 4. 发送 POST 请求到 Ollama API
response = requests.post(ollama_base_url, json=payload)
# 5. 检查响应状态
if response.status_code != 200:
# print(f"Error: Ollama API returned status code {response.status_code}")
print(response.text)
return {
'code': 404,
'message': f"{response['error']}",
}
# 6. 解析 JSON 响应
result = response.json()
if "response" not in result:
print(result)
return {
'code': 500,
'message': "Error: Unexpected response format from Ollama",
}
llm_output = result["response"].strip()
# print(llm_output)
think_match = re.search(r'<think>(.*?)</think>', llm_output, re.DOTALL)
ai_think = think_match.group(1).strip() if think_match else ""
# 移除 <think>...</think> 标签及其内容,得到纯净的关键词列表部分
clean_output = re.sub(r'<think>.*?</think>', '', llm_output, count=1, flags=re.DOTALL).strip()
# 7. 简单清洗和验证关键词
# 假设 LLM 输出格式为 "关键词1, 关键词2, ..."
raw_tags = [tag.strip() for tag in clean_output.split(',') if tag.strip()]
# print(raw_tags)
# 过滤掉不符合长度要求的词
# filtered_tags = [
# tag for tag in raw_tags
# if min_length <= len(tag) <= max_length and tag # 忽略空字符串
# ]
# 去重并保持顺序
seen = set()
unique_filtered_tags = []
for tag in raw_tags:
if tag not in seen:
seen.add(tag)
unique_filtered_tags.append(tag)
# 记录结束时间
end_time = time.time()
# 计算耗时
elapsed_time = end_time - start_time
return {
'code':0,
'message': 'success',
'data': {
'model': model,
'think': ai_think,
'tags': unique_filtered_tags,
'consume': elapsed_time
}
}
except requests.exceptions.RequestException as e:
# print(f"Error calling Ollama API: {e}")
return {
'code': 500,
'message': f"Error calling Ollama API: {e}",
}
except json.JSONDecodeError as e:
# print(f"Error decoding JSON response from Ollama: {e}")
return {
'code': 500,
'message': f"Error decoding JSON response from Ollama: {e}"
}
except Exception as e:
# print(f"An unexpected error occurred: {e}")
return {
'code': 500,
'message': f"An unexpected error occurred: {e}"
}

View File

@@ -1,40 +0,0 @@
import extract_doc_tag as ex_doc_tag
# --- 方式一:指定文件路径 ---
file_path = 'test.txt'
try:
with open(file_path, 'r', encoding='utf-8') as file:
my_article_content = file.read()
except FileNotFoundError:
print(f"错误:找不到文件 '{file_path}'")
exit(1)
except Exception as e:
print(f"读取文件时发生错误: {e}")
exit(1)
model = "qwen3:1.7b"
# model = "qwen3:0.6b"
OLLAMA_BASE_URL = "http://127.0.0.1:11434/api/generate"
# OLLAMA_BASE_URL = "http://152.136.153.72:27009/api/generate"
extracted_tags = ex_doc_tag.extract_tags_with_ollama_from_content(
OLLAMA_BASE_URL,
model,
my_article_content,
max_tags=5,
min_length=2,
max_length=10
)
if extracted_tags['code'] == 0:
print('思考过程:')
print(extracted_tags['data']['think'])
print('=' * 60)
print('文章内容长度', len(my_article_content))
# print(f"Ollama 模型:{model}")
print('=' * 60)
print('文章标签:', extracted_tags['data']['tags'])
print('=' * 60)
print(f"总耗时: {extracted_tags['data']['consume']:.2f}")
else:
print(extracted_tags)

View File

@@ -1,13 +0,0 @@
今天周六早上起床,心血来潮开始刷视频,不知不觉时间就像被偷走一样,和游戏类似,两三个小时转瞬即逝。我每次都想着,诶呀一个一分多钟的视频算什么,下一个!于是在百个视频过去后一上午的时间也消失了。
从喜羊羊,到情感生活,到家庭育儿,到程序编码,到机器制作,再到科幻制作,再到大黄蜂。你可能会奇怪,喜羊羊和情感生活有什么关系,家庭育儿和程序编码有什么关系,机器制作和科幻制作又有什么关系。其实这些没有奇怪的地方,喜羊羊里面的喜羊羊美羊羊沸羊羊的关系引出情感,儿童的幼年编程引出了程序编码,机器制作的炫酷效果引出了科幻制作。
一个视频就像细胞上面的无数的受体和另一个细胞上面的配体一样,他们那种概念的联系将一个个视频连锁成宇宙中的群星看似毫无联系,细看却是万般变化的星座。
我在想是什么变成这样的呢?标签?模糊的标签?也许是这样,但这这是一种浅显的理解吧!因为这种标签,把他们分成了不同的种类,划分成不同的视频,然后用一个概念展示给我们看。罗翔老师讲过一个他的一件故事,他在上大学的时候,初入大学很多一个地区的人会互相认识,他去了他们省的聚会,然后他突然发现下次的聚合没有叫他,才知道是一个市区的聚会。具体内容我早已忘记,但是大概意思是这样的。我们每个人都像网络视频那样被打上了标签,我们用这个来区分自己的同类,异类。我们会和同类笑着说“看啊!那个人说话好怪啊!看啊!那个人吃饭的样子好丑”但是也许你在你同类眼里也是个异类,一个嘲笑他人的异类。于是你不断给自己打标签,做完这个做那个,加入这个加那个,最终像一只蝙蝠一样,鸟兽不分。
扯远了。其实这种标签带来的分化自古就有,可以具象的堪称阶级划分,就像盖茨比赚了再多的钱,举办了再多的宴会也融入不进去权贵阶层。可以抽象的理解为人们的闲话,谁家怎么怎么了,那家又如何如何。这种东西就像是无形的线,勒住我们的思想和手指。大数据的判别让我们困于信息茧房,让我们只看到自己想看的(比如追星的人会刷到自己喜欢明星的一切,不喜欢那个明星的则会刷到各种搞怪的视频)。我们的思想逐渐变得狭隘,三分钟的视频让我们的喜欢和伤心都会变得特别廉价。我经常看到的一句话就是“原本很开心的,看到你这里绷不住了”,“挺难受的,你这评论给我笑嘻了”无数的视频过去,让我们的喜欢随便的说出口,让我们的痛苦说来就来。
很难不否认短视频在释放压力方面是对当代打工人的良药。快节奏+短视频带给无数人不一样的生活见地,可是这种方式终归是饮鸩止渴,浅陋而自大的。你再也不会记得白鹿原里的白嘉轩,只会明白他叫大壮,我们再也不会记得南海十三郎里面的江誉镠,也许他的名字会叫作小亮。真不知百年之后人们的思想会是如何。
我相信还是会有下一个鲁迅的,那种《中国人难道失掉自信力了吗》那种俯首甘为孺子牛的鲁迅。用笔尖刺痛每一人的脊梁。也许我们不是愚蠢,只是不想醒罢了