You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Wiktionary Parser返回结果的可读性与结构化?

针对Wiktionary Parser返回数据的结构化整理方案

1. 编写专用数据提取函数,按需筛选核心字段

根据你需要展示的信息(如词性、释义、发音、例句),编写针对性提取逻辑,直接过滤冗余内容。以俄语单词处理为例:

from wiktionaryparser import WiktionaryParser

parser = WiktionaryParser()

def extract_core_info(word, lang):
    raw_result = parser.fetch(word, lang)
    processed_data = []
    
    for entry in raw_result:
        entry_info = {
            "词源": entry.get("etymology", "无"),
            "发音": entry.get("pronunciations", {}).get("text", ["无"])[0],
            "释义列表": []
        }
        
        # 提取每个释义项
        for definition in entry.get("definitions", []):
            pos = definition.get("partOfSpeech", "未知词性")
            # 过滤语法说明类文本,只保留纯释义
            pure_meanings = [text for text in definition.get("text", []) 
                             if not text.startswith(("(", "*", "also"))]
            
            # 整理例句(针对俄语原数据的三组重复格式去重)
            refined_examples = []
            seen_pairs = set()
            ex_list = definition.get("examples", [])
            for idx in range(0, len(ex_list), 3):
                if idx + 2 < len(ex_list):
                    original = ex_list[idx].split(".A magnificent")[0] + "."
                    translation = ex_list[idx+2]
                    if (original, translation) not in seen_pairs:
                        refined_examples.append(f"原句:{original}\n译文:{translation}")
                        seen_pairs.add((original, translation))
            
            entry_info["释义列表"].append({
                "词性": pos,
                "含义": pure_meanings,
                "例句": refined_examples[:3]  # 仅保留前3个有效例句
            })
        
        processed_data.append(entry_info)
    return processed_data

# 测试调用
result = extract_core_info("человек", "russian")
for item in result:
    print(f"词源:{item['词源']}")
    print(f"发音:{item['发音']}")
    for idx, meaning in enumerate(item['释义列表'], 1):
        print(f"\n{idx}. 词性:{meaning['词性']}")
        print("含义:")
        for m in meaning['含义']:
            print(f"  - {m}")
        print("例句:")
        for ex in meaning['例句']:
            print(f"  > {ex}")

2. 递归扁平化嵌套结构

如果需要通用处理任意嵌套的字典/列表,可以用递归函数将多层结构转为扁平键值对,方便后续处理:

def flatten_nested_data(data, parent_key="", separator="·"):
    items = []
    if isinstance(data, dict):
        for key, value in data.items():
            new_key = f"{parent_key}{separator}{key}" if parent_key else key
            items.extend(flatten_nested_data(value, new_key, separator))
    elif isinstance(data, list):
        for index, value in enumerate(data):
            new_key = f"{parent_key}{separator}{index}" if parent_key else str(index)
            items.extend(flatten_nested_data(value, new_key, separator))
    else:
        items.append((parent_key, str(data)))
    return items

# 使用示例
raw_data = parser.fetch("человек", "russian")
flattened = flatten_nested_data(raw_data)
# 展示前20条扁平化结果
for key, value in flattened[:20]:
    print(f"{key}: {value}")

3. 用数据类规范结构(适合大型项目)

用Pydantic定义数据模型,强制规范返回数据的结构,自动处理字段缺失问题:

from pydantic import BaseModel, Field
from typing import List, Optional

class Example(BaseModel):
    original: str
    translation: str

class Definition(BaseModel):
    part_of_speech: str = Field(alias="partOfSpeech")
    meanings: List[str] = Field(alias="text")
    examples: List[Example] = []

class Pronunciation(BaseModel):
    text: List[str]
    audio: List[str]

class WiktionaryEntry(BaseModel):
    etymology: Optional[str]
    definitions: List[Definition]
    pronunciations: Pronunciation

def parse_to_model(word, lang):
    raw_data = parser.fetch(word, lang)
    model_entries = []
    
    for entry in raw_data:
        processed_defs = []
        for d in entry["definitions"]:
            # 转换例句格式
            ex_pairs = []
            ex_list = d.get("examples", [])
            for i in range(0, len(ex_list), 3):
                if i + 2 < len(ex_list):
                    ex_pairs.append(Example(original=ex_list[i], translation=ex_list[i+2]))
            processed_defs.append(Definition(**d, examples=ex_pairs))
        
        model_entries.append(WiktionaryEntry(
            etymology=entry.get("etymology"),
            definitions=processed_defs,
            pronunciations=Pronunciation(**entry["pronunciations"])
        ))
    return model_entries

# 测试调用
model_result = parse_to_model("человек", "russian")
for entry in model_result:
    print(f"词源:{entry.etymology}")
    print(f"发音:{entry.pronunciations.text[0]}")
    for idx, def_item in enumerate(entry.definitions, 1):
        print(f"\n{idx}. 词性:{def_item.part_of_speech}")
        print("含义:")
        for m in def_item.meanings:
            print(f"  - {m}")
        print("例句:")
        for ex in def_item.examples[:2]:
            print(f"  原句:{ex.original}")
            print(f"  译文:{ex.translation}")

实用提示

  • 不同语言的返回格式存在细微差异(比如英语例句格式和俄语不同),需要针对目标语言做适配
  • 必须添加异常处理,避免因字段缺失导致程序崩溃
  • 若仅需特定信息(如仅释义),直接跳过无关字段,无需遍历整个嵌套结构

内容的提问来源于stack exchange,提问作者diddy sideburns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:20:52