找回密码
 欢迎注册
查看: 73|回复: 4

[悬赏] 高难代码编程求助

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
一份OEIS网页的Excel文件,要求智能处理,要求代码自动化处理。
这个是要筛出一大部分没有用的数列,我发觉有一些数列真的没有公式,是穷举,是死算的。
一:有38万多行,A列为文献号,B列为标题,C列为数列数据,均已经下载保存在电脑里。
1.现在对B列进行翻译,不保存原来的英文,把翻译好的中文保存在原来英文的位置。
2.对C列进行规律研究,给出C列的公式,或者多项式,写在D列的同一行上,多番努力后仍然找不公式的,打开文献号对应的网页寻找,网页上也没有的,注明“没有找到”。

公式有标准数学名称的写明该公式名称,在写该公式。比如:勾股定理:a^2+b^2=c^2,这样。
要求调用以下四个软件中的一个软件:maple软件或者Mathematica或者PARI或者Python进行验证。给出的公式要求计算10个数据,然后与C列数据对比验证,精确无误后,才保留公式。在E列给出验证的代码。帮我编写一个代码实现上诉功能。

二:上面的要求如果能够一次性实现更好,如果不能实现,降低要求。可以分批次实现,一次运行100条,我发现百度文本粘贴翻译一次可以120条左右,限制1万个字。C列的规律研究是重点实现的目标。

三:如果翻译功能实现不了,可以放弃。转而重点寻找C列数据的公式和每个数列的验证代码。

说明:数列数据下载地址:https://oeis.org/stripped.gz
我用EmEditorPortableEmEditor文本编辑器,我把它提取到Excel中,文本打不开,太多了。数列标题下载:https://oeis.org/names.gz
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 3 天前 | 显示全部楼层
AI写了一段,但是好像根本不运行。
graph TD
    A[读取Excel] --> B[翻译B列]
    B --> C[分析C列]
    C -->|成功| D[验证公式]
    C -->|失败| E[爬取网页]
    E -->|找到公式| D
    E -->|未找到| F[标记未找到]
    D --> G[保存结果]

import pandas as pd
import numpy as np
from sympy import series, symbols, simplify
from translators import google
import requests
from bs4 import BeautifulSoup
import re
import logging
from tqdm import tqdm

# 初始化配置
logging.basicConfig(filename='processing.log', level=logging.INFO)
MAX_RETRIES = 3
CHUNK_SIZE = 1000

def translate_text(text):
    """使用谷歌翻译API"""
    for _ in range(MAX_RETRIES):
        try:
            return google(text, from_language='en', to_language='zh')
        except Exception as e:
            logging.warning(f"翻译失败重试: {str(e)}")
    return "翻译失败"

def analyze_sequence(sequence):
    """使用SymPy进行数列分析"""
    try:
        n = symbols('n')
        # 示例分析逻辑(需扩展)
        diffs = np.diff(sequence)
        if len(set(diffs)) == 1:
            degree = 1
            coeff = diffs[0]
            return f"等差数列:a(n) = {sequence[0]} + {coeff}*(n-1)"
        # 添加更多分析逻辑...
    except Exception as e:
        logging.error(f"分析失败: {str(e)}")
    return None

def fetch_oeis_formula(oeis_id):
    """爬取OEIS公式"""
    url = f"https://oeis.org/A{oeis_id:06d}"
    try:
        response = requests.get(url, timeout=10)
        soup = BeautifulSoup(response.text, 'html.parser')
        # 解析公式部分(示例解析逻辑)
        formula_div = soup.find('td', class_='seq').text
        if 'formula' in formula_div:
            match = re.search(r'Formula:\s*(.*?)\n', formula_div)
            return match.group(1) if match else None
    except Exception as e:
        logging.error(f"爬取失败: {str(e)}")
    return None

def validate_formula(formula, sequence):
    """公式验证"""
    try:
        # 使用SymPy进行符号计算验证
        n = symbols('n')
        expr = simplify(formula.split(':')[-1].strip())
        for i in range(1, 11):
            if expr.subs(n, i) != sequence[i-1]:
                return False
        return True
    except:
        return False

def process_chunk(df):
    """处理数据块"""
    for idx, row in tqdm(df.iterrows(), total=len(df)):
        # 处理B列翻译
        df.at[idx, 'B'] = translate_text(row['B'])
        
        # 处理C列分析
        sequence = list(map(int, str(row['C']).split(',')))
        formula = analyze_sequence(sequence)
        
        if not formula:
            formula = fetch_oeis_formula(row['A'])
            if not formula:
                df.at[idx, 'D'] = "未找到"
                continue
               
        if validate_formula(formula, sequence):
            df.at[idx, 'D'] = formula
        else:
            df.at[idx, 'D'] = "验证失败"
    return df

def main():
    reader = pd.read_excel('oeis_data.xlsx', chunksize=CHUNK_SIZE)
    for i, chunk in enumerate(reader):
        processed = process_chunk(chunk)
        processed.to_excel(f'result_{i:03d}.xlsx', index=False)
        logging.info(f"已完成块 {i}")

if __name__ == "__main__":
    main()
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复 支持 1 反对 0

使用道具 举报

发表于 3 天前 | 显示全部楼层
数论爱好者 发表于 2025-3-30 16:33
AI写了一段,但是好像根本不运行。
graph TD
    A[读取Excel] --> B[翻译B列]

代码可以放到代码框里面。
方便别人复制粘贴
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 前天 06:29 | 显示全部楼层
nyy 发表于 2025-3-30 20:42
代码可以放到代码框里面。
方便别人复制粘贴

从38万条里面筛去33万条,保留5万条左右。
1.网页中必需含有两个关键词:formula和example,即公式和例子。
2.数列必需是正增长数列,数列中不能有负整数出现,从第六项以后不能有相等的数值出现。
采集符合标准的oeis网页,每1000个文献号网页内容为一册编辑成doc文档,方便浏览学习,而不是搜索。
现在AI写了一个代码,能够正常运行。
  1. import pandas as pd
  2. import requests
  3. import re
  4. import os
  5. import time
  6. from tqdm import tqdm
  7. from bs4 import BeautifulSoup

  8. # 配置参数
  9. EXCEL_PATH = r'D:\2\oeis网址.xlsx'
  10. OUTPUT_DIR = r'D:\2\qualified_sequences'
  11. KEYWORDS = {'formula', 'example'}

  12. def load_urls():
  13.     """加载Excel中的URL列表"""
  14.     df = pd.read_excel(EXCEL_PATH, header=None, usecols=[0], names=['URL'])
  15.     return [url.strip() for url in df['URL'].dropna()
  16.             if url.startswith('https://oeis.org/A')]

  17. def extract_sequence_data(text):
  18.     """增强型数列提取(支持更多格式)"""
  19.     # 匹配所有可能的数列表示方式
  20.     pattern = r'''
  21.         (?:^|\b)          # 起始边界
  22.         (?:               # 匹配前缀
  23.             (?:Terms?|Sequence|Starts? with|Data):?
  24.             [\s\[]*        # 允许空格和方括号
  25.         )?
  26.         (                 # 捕获数字部分
  27.             (?:           # 数字和分隔符组合
  28.                 -?\d+     # 支持负数(但后续会过滤掉)
  29.                 (?:       # 复杂分隔符处理
  30.                     [,\s-]+
  31.                     (?=\d) # 确保分隔符后紧跟数字
  32.                 )+
  33.             )+
  34.         )
  35.     '''
  36.     matches = re.findall(pattern, text, re.VERBOSE | re.IGNORECASE)
  37.    
  38.     sequences = []
  39.     for match in matches:
  40.         # 清洗并转换数字
  41.         numbers = []
  42.         for num_str in re.split(r'[,\s-]+', match.strip()):
  43.             if num_str:
  44.                 try:
  45.                     num = int(num_str)
  46.                     numbers.append(num)
  47.                 except ValueError:
  48.                     continue
  49.         if len(numbers) >= 8:
  50.             sequences.append(numbers)
  51.    
  52.     return sequences

  53. def validate_sequence(seq):
  54.     """修正后的严格验证"""
  55.     if len(seq) < 8 or any(n < 0 for n in seq):
  56.         return False
  57.    
  58.     try:
  59.         diff5 = seq[5] - seq[4]  # 第六项-第五项
  60.         diff6 = seq[6] - seq[5]  # 第七项-第六项
  61.         diff7 = seq[7] - seq[6]  # 第八项-第七项
  62.     except IndexError:
  63.         return False
  64.    
  65.     return diff5 >= 1 and diff6 > 1 and diff7 > 1

  66. def process_url(url):
  67.     """增强处理流程"""
  68.     try:
  69.         # 下载页面
  70.         resp = requests.get(url, timeout=25, headers={
  71.             'User-Agent': 'Mozilla/5.0 (ResearchBot/1.0)'
  72.         })
  73.         resp.raise_for_status()
  74.         text = resp.text.lower()
  75.         
  76.         # 第一层筛选:关键词
  77.         if not all(kw in text for kw in KEYWORDS):
  78.             return False, "缺少关键词"
  79.         
  80.         # 第二层筛选:数列
  81.         sequences = extract_sequence_data(resp.text)
  82.         for seq in sequences:
  83.             if validate_sequence(seq):
  84.                 # 保存页面
  85.                 seq_id = url.split('/')[-1]
  86.                 with open(os.path.join(OUTPUT_DIR, f'{seq_id}.html'), 'w', encoding='utf-8') as f:
  87.                     f.write(resp.text)
  88.                 return True, "保存成功"
  89.         return False, "无合格数列"
  90.    
  91.     except Exception as e:
  92.         return False, f"错误:{str(e)}"

  93. if __name__ == "__main__":
  94.     os.makedirs(OUTPUT_DIR, exist_ok=True)
  95.     urls = load_urls()
  96.     print(f"待处理URL数量:{len(urls)}")
  97.    
  98.     with tqdm(urls, desc="精准筛选进度") as pbar:
  99.         for url in pbar:
  100.             success, msg = process_url(url)
  101.             pbar.set_postfix_str(f"{'✅' if success else '❌'} {msg[:15]}")
  102.             time.sleep(1.8)
  103.    
  104.     print(f"处理完成!结果保存在:{OUTPUT_DIR}")
  105.     input("按 Enter 退出...")
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 昨天 11:29 | 显示全部楼层
数论爱好者 发表于 2025-3-31 06:29
从38万条里面筛去33万条,保留5万条左右。
1.网页中必需含有两个关键词:formula和example,即公式和例子 ...

一直以来,想给oeis网站做一个目录,但是我能力又做不到。oeis网站有一个目录导引,但对中国人来说太糟糕。抛砖引玉,哪个大神有能力做一下?
为OEIS(线上整数数列百科全书)编写分类目录需要系统性组织和结构化现有的数列,以便用户更容易发现和探索相关主题。以下是一个分步指南和框架设计,帮助实现这一目标:

‌1. 确定分类维度‌
分类目录需要多维度的划分,涵盖数学属性、应用领域、生成方法等。建议采用以下核心维度:

‌(1) 数学分支‌
‌数论‌:素数(如A000040)、因数分解、模运算相关数列。
‌组合数学‌:排列组合数(如A000110贝尔数)、图论数列、分拆数。
‌代数‌:多项式系数、群论相关数列。
‌几何‌:多面体顶点数、晶格路径数列。
‌分析‌:级数展开系数、特殊函数值。
‌(2) 应用领域‌
‌计算机科学‌:编码理论(如格雷码A003188)、算法复杂度相关数列。
‌物理学‌:量子力学中的能级序列、统计力学模型。
‌密码学‌:伪随机数生成器、哈希函数相关数列。
‌生物学‌:DNA序列模式、种群增长模型。
‌(3) 数列特性‌
‌有限性‌:有限长数列(如A080670,质因数分解的十进制表示)。
‌周期性‌:循环数列(如A040000的重复数字)。
‌单调性‌:严格递增(A000027自然数)、非递减(A000217三角形数)。
‌(4) 生成方法‌
‌递推关系‌:线性递推(斐波那契A000045)、非线性递推。
‌生成函数‌:母函数、指数生成函数等生成的系数。
‌几何构造‌:网格计数(A002416 n×n二进制矩阵数)、多面体对称性。
‌2. 构建分类层次结构‌
采用树状结构,从粗到细逐层划分,例如:

text
Copy Code
数论
├─ 素数
│   ├─ 普通素数(A000040)
│   ├─ 双素数(A001359)
│   └─ 安全素数(A005385)
├─ 因数相关
│   ├─ 除数函数(A000005)
│   └─ 完全数(A000396)
└─ 数论函数
    ├─ 欧拉φ函数(A000010)
    └─ 莫比乌斯函数(A008683)
‌3. 分类工具与实现方法‌
‌自动化预处理‌:利用关键词提取和自然语言处理(NLP)分析数列描述(%O, %N字段)。
‌人工标注‌:由数学专家审核分类,确保准确性。可参考OEIS现有标签(如core, nice, nonn等)进行扩展。
‌多重标签系统‌:允许一个数列属于多个类别(例如A000108卡塔兰数可同时属于组合数学、递推关系和生成函数)。
‌4. 技术实现与界面设计‌
‌数据库扩展‌:在OEIS现有MySQL数据库中新增分类表,建立数列ID与分类标签的多对多关系。
‌用户界面‌:
导航树:侧边栏显示分类层次,支持展开/折叠。
高级搜索:按分类标签筛选(如“数论 AND 素数 AND 无限”);
交叉链接:在数列页面显示所属分类(如“分类:组合数学/递推关系/离散结构”)。
‌5. 维护与社区协作‌
‌版本控制‌:记录分类变更历史,允许回滚。
‌社区贡献‌:开放分类建议入口,类似维基编辑,但需审核。
‌动态更新‌:定期检查新数列(OEIS每周新增约50个序列),自动分类并提示人工复核。
‌6. 示例分类条目‌
以‌A000290(平方数)‌为例:

‌数学分支‌:数论/经典序列
‌生成方法‌:多项式生成(n²)
‌应用领域‌:几何(正方形点阵)、物理学(能级简并)
‌特性‌:无限、单调递增、线性递推(a(n) = a(n-1) + 2n-1)
‌7. 挑战与解决方案‌
‌模糊分类‌:部分数列可能跨多个领域。解决方案是允许多重标签,并提供“相关分类”推荐。
‌维护成本‌:通过半自动化工具(如基于规则的分类器)降低人工工作量。
‌用户教育‌:提供分类指南和示例,帮助用户理解分类逻辑。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2025-4-2 05:53 , Processed in 0.035147 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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