[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KDXFE789R67DM8TE73ESR0":3,"skill-same:01M6KDXFE789R67DM8TE73ESR0":57},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M6KDXFE789R67DM8TE73ESR0","file-organizer-by-subject",null,"Organize files into subject folders using keyword-based classification of titles and abstracts, with fallback to full text extraction.","cxcscmu\u002FSkillLearnBench","cxcscmu","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142838272?v=4","01M6KCQDFQWPDSN0MKZY96MSQP","01M6KCQDM7G70TKJ28NTSQC0RZ",92,"MIT","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb1-one-shot-claude-sonnet-4-6\u002Forganize-messy-files\u002Ffile-organizer-by-subject\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29],"file","file organizer","file organizer by subject","extraction","classification","text","organize files","files","fallback","organize","full","with","2026-11-10 10:12:30",false,"---\nname: file-organizer-by-subject\ndescription: Organize files into subject folders using keyword-based classification of titles and abstracts, with fallback to full text extraction.\n---\n\n# File Organizer by Subject Skill\n\n## Overview\nClassify and move files (PDF, PPTX, DOCX) into subject folders using keyword matching on metadata and text content.\n\n## Folder Setup\n```python\nimport os, shutil\n\ndef create_subject_folders(base_dir, subjects):\n    for subject in subjects:\n        os.makedirs(os.path.join(base_dir, subject), exist_ok=True)\n\nSUBJECTS = ['LLM', 'trapped_ion_and_qc', 'black_hole', 'DNA', 'music_history']\n```\n\n## Keyword-Based Classifier\n```python\nKEYWORDS = {\n    'LLM': [\n        'language model', 'large language', 'llm', 'gpt', 'bert', 'transformer',\n        'attention mechanism', 'natural language', 'nlp', 'text generation',\n        'chatgpt', 'instruction tuning', 'rlhf', 'tokenization', 'embedding',\n        'fine-tuning', 'prompt', 'in-context learning', 'chain of thought'\n    ],\n    'trapped_ion_and_qc': [\n        'trapped ion', 'ion trap', 'quantum computing', 'qubit', 'quantum gate',\n        'quantum circuit', 'quantum error', 'decoherence', 'quantum entanglement',\n        'quantum supremacy', 'quantum advantage', 'quantum processor',\n        'laser cooling', 'penning trap', 'paul trap', 'quantum memory',\n        'quantum simulation', 'quantum algorithm', 'shor', 'grover'\n    ],\n    'black_hole': [\n        'black hole', 'event horizon', 'hawking radiation', 'singularity',\n        'general relativity', 'gravitational wave', 'neutron star', 'pulsar',\n        'accretion disk', 'kerr', 'schwarzschild', 'spacetime', 'cosmology',\n        'dark matter', 'dark energy', 'galaxy', 'astrophysics', 'quasar',\n        'gravitational lensing', 'wormhole', 'holography', 'ads\u002Fcft'\n    ],\n    'DNA': [\n        'dna', 'rna', 'genome', 'gene', 'protein', 'crispr', 'sequencing',\n        'mutation', 'chromosome', 'nucleotide', 'base pair', 'replication',\n        'transcription', 'translation', 'epigenetics', 'pcr', 'molecular biology',\n        'bioinformatics', 'phylogenetic', 'evolution', 'cell', 'enzyme'\n    ],\n    'music_history': [\n        'music', 'musical', 'composer', 'symphony', 'opera', 'baroque',\n        'renaissance', 'classical music', 'jazz', 'rock', 'instrument',\n        'melody', 'harmony', 'rhythm', 'orchestra', 'sonata', 'concerto',\n        'beethoven', 'mozart', 'bach', 'history of music', 'musicology'\n    ]\n}\n\ndef classify_by_keywords(text, title=\"\"):\n    \"\"\"Return subject with highest keyword match score.\"\"\"\n    combined = (title + \" \" + text).lower()\n    scores = {}\n    for subject, keywords in KEYWORDS.items():\n        score = sum(1 for kw in keywords if kw in combined)\n        scores[subject] = score\n\n    best = max(scores, key=scores.get)\n    if scores[best] == 0:\n        return None  # No match found\n    return best\n```\n\n## Moving Files\n```python\ndef move_file(src_path, dest_folder):\n    \"\"\"Move file to destination folder, preserving filename.\"\"\"\n    filename = os.path.basename(src_path)\n    dest_path = os.path.join(dest_folder, filename)\n    shutil.move(src_path, dest_path)\n    return dest_path\n```\n\n## Complete Pipeline\n```python\ndef organize_files(source_dir, dest_base_dir, subjects):\n    create_subject_folders(dest_base_dir, subjects)\n\n    files = list(Path(source_dir).iterdir())\n    unclassified = []\n\n    for f in files:\n        text = extract_text_from_file(f)\n        title = extract_title(f)\n        subject = classify_by_keywords(text, title)\n\n        if subject:\n            move_file(str(f), os.path.join(dest_base_dir, subject))\n        else:\n            unclassified.append(f)\n\n    return unclassified\n```\n\n## Handling PPTX and DOCX\n```python\nfrom pptx import Presentation\nfrom docx import Document\n\ndef extract_text_pptx(path):\n    prs = Presentation(path)\n    text = []\n    for slide in prs.slides:\n        for shape in slide.shapes:\n            if hasattr(shape, \"text\"):\n                text.append(shape.text)\n    return \" \".join(text)\n\ndef extract_text_docx(path):\n    doc = Document(path)\n    return \" \".join([p.text for p in doc.paragraphs])\n```\n\n## Strategy Notes\n- Start with arxiv API for PDF files with arxiv-style names (fast, no local processing)\n- Fall back to PDF text extraction for unrecognized files\n- Use keyword scoring rather than LLM for reproducibility\n- If score is tied, use arxiv category codes as tiebreaker\n","# File Organizer by Subject Skill\n\n## Overview\nClassify and move files (PDF, PPTX, DOCX) into subject folders using keyword matching on metadata and text content.\n\n## Folder Setup\n```python\nimport os, shutil\n\ndef create_subject_folders(base_dir, subjects):\n    for subject in subjects:\n        os.makedirs(os.path.join(base_dir, subject), exist_ok=True)\n\nSUBJECTS = ['LLM', 'trapped_ion_and_qc', 'black_hole', 'DNA', 'music_history']\n```\n\n## Keyword-Based Classifier\n```python\nKEYWORDS = {\n    'LLM': [\n        'language model', 'large language', 'llm', 'gpt', 'bert', 'transformer',\n        'attention mechanism', 'natural language', 'nlp', 'text generation',\n        'chatgpt', 'instruction tuning', 'rlhf', 'tokenization', 'embedding',\n        'fine-tuning', 'prompt', 'in-context learning', 'chain of thought'\n    ],\n    'trapped_ion_and_qc': [\n        'trapped ion', 'ion trap', 'quantum computing', 'qubit', 'quantum gate',\n        'quantum circuit', 'quantum error', 'decoherence', 'quantum entanglement',\n        'quantum supremacy', 'quantum advantage', 'quantum processor',\n        'laser cooling', 'penning trap', 'paul trap', 'quantum memory',\n        'quantum simulation', 'quantum algorithm', 'shor', 'grover'\n    ],\n    'black_hole': [\n        'black hole', 'event horizon', 'hawking radiation', 'singularity',\n        'general relativity', 'gravitational wave', 'neutron star', 'pulsar',\n        'accretion disk', 'kerr', 'schwarzschild', 'spacetime', 'cosmology',\n        'dark matter', 'dark energy', 'galaxy', 'astrophysics', 'quasar',\n        'gravitational lensing', 'wormhole', 'holography', 'ads\u002Fcft'\n    ],\n    'DNA': [\n        'dna', 'rna', 'genome', 'gene', 'protein', 'crispr', 'sequencing',\n        'mutation', 'chromosome', 'nucleotide', 'base pair', 'replication',\n        'transcription', 'translation', 'epigenetics', 'pcr', 'molecular biology',\n        'bioinformatics', 'phylogenetic', 'evolution', 'cell', 'enzyme'\n    ],\n    'music_history': [\n        'music', 'musical', 'composer', 'symphony', 'opera', 'baroque',\n        'renaissance', 'classical music', 'jazz', 'rock', 'instrument',\n        'melody', 'harmony', 'rhythm', 'orchestra', 'sonata', 'concerto',\n        'beethoven', 'mozart', 'bach', 'history of music', 'musicology'\n    ]\n}\n\ndef classify_by_keywords(text, title=\"\"):\n    \"\"\"Return subject with highest keyword match score.\"\"\"\n    combined = (title + \" \" + text).lower()\n    scores = {}\n    for subject, keywords in KEYWORDS.items():\n        score = sum(1 for kw in keywords if kw in combined)\n        scores[subject] = score\n\n    best = max(scores, key=scores.get)\n    if scores[best] == 0:\n        return None  # No match found\n    return best\n```\n\n## Moving Files\n```python\ndef move_file(src_path, dest_folder):\n    \"\"\"Move file to destination folder, preserving filename.\"\"\"\n    filename = os.path.basename(src_path)\n    dest_path = os.path.join(dest_folder, filename)\n    shutil.move(src_path, dest_path)\n    return dest_path\n```\n\n## Complete Pipeline\n```python\ndef organize_files(source_dir, dest_base_dir, subjects):\n    create_subject_folders(dest_base_dir, subjects)\n\n    files = list(Path(source_dir).iterdir())\n    unclassified = []\n\n    for f in files:\n        text = extract_text_from_file(f)\n        title = extract_title(f)\n        subject = classify_by_keywords(text, title)\n\n        if subject:\n            move_file(str(f), os.path.join(dest_base_dir, subject))\n        else:\n            unclassified.append(f)\n\n    return unclassified\n```\n\n## Handling PPTX and DOCX\n```python\nfrom pptx import Presentation\nfrom docx import Document\n\ndef extract_text_pptx(path):\n    prs = Presentation(path)\n    text = []\n    for slide in prs.slides:\n        for shape in slide.shapes:\n            if hasattr(shape, \"text\"):\n                text.append(shape.text)\n    return \" \".join(text)\n\ndef extract_text_docx(path):\n    doc = Document(path)\n    return \" \".join([p.text for p in doc.paragraphs])\n```\n\n## Strategy Notes\n- Start with arxiv API for PDF files with arxiv-style names (fast, no local processing)\n- Fall back to PDF text extraction for unrecognized files\n- Use keyword scoring rather than LLM for reproducibility\n- If score is tied, use arxiv category codes as tiebreaker\n",{"name":5,"description":7},"main","726e1f79b96b0cb3d729d0e55a1c847e0b5353ae","skills\u002Fb1-one-shot-claude-sonnet-4-6\u002Forganize-messy-files\u002Ffile-organizer-by-subject",7,"https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench","https:\u002F\u002Fcxcscmu.github.io\u002FSkillLearnBench","https:\u002F\u002Fgithub.com\u002Fcxcscmu","2026-10-02 22:55:36",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add cxcscmu\u002FSkillLearnBench --skill file-organizer-by-subject",{"tool":49,"command":50},"bunx","bunx skills add cxcscmu\u002FSkillLearnBench --skill file-organizer-by-subject",{"tool":52,"command":53},"pnpm","pnpm dlx skills add cxcscmu\u002FSkillLearnBench --skill file-organizer-by-subject","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb1-one-shot-claude-sonnet-4-6\u002Forganize-messy-files\u002Ffile-organizer-by-subject\u002FSKILL.md",true,[],[58,76,101,119,139,151],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":69,"publishedAt":30},"01M6KM5KH175P5ABP5JMX2SBDQ","object_counter","Count occurrences of an object in the image using computer vision algorithm.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Fvideo-object-counting\u002Fobject_counter\u002FSKILL.md",[64],{"categoryNo":65,"categoryName":66,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[70,71,72,73,74,75],"object counter","object","vision","computer","Computer Vision","image",{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":85,"publishedAt":30},"01M6KM51TMVXG79MMPCS6Y8G86","travel-planning-workflow","Invoke this skill when performing travel planning. It defines a structured workflow for generating itineraries. Following this workflow is essential to ensure the final plan satisfies user requirements.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Ftravel-planning-workflow\u002FSKILL.md",[82],{"categoryNo":83,"categoryName":84,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000023","Skill与智能体开发",[86,87,88,89,90,91,92,93,94,95,96,97,98,99,100],"workflow","planning","planning workflow","travel","travel planning","travel planning workflow","structured","performing","plan","for","user","it","requirements","essential","itineraries",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":30},"01M6KM4DY820XHS9YTSK5QP5HD","bundled-dataset-search-tool","invoke this skill when you need to perform database search for travel planning. This skill provides some useful pre-packaged tools to look up accommodations, attractions, cities, driving distance, flights, and restaurants from the bundled dataset.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Fbundled-dataset-search-tool\u002FSKILL.md",[],[108,109,110,111,112,113,114,89,115,116,90,117,95,118,87],"search","tool","dataset","bundled dataset search tool","restaurants","Tools","up","look","flights","you","database",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":30},"01M6KM465BB9PQ0B548HQSVAWZ","glm-output","Output-processing guidance for GLM tasks. Especially useful after glm-basics and glm-calibration when you need verifier-matching metrics from output.nc and a final \u002Froot\u002Fmetrics.json.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-output\u002FSKILL.md",[],[126,127,128,95,129,130,131,132,133,134,135,136,117,137,138],"glm output","output","glm","tasks","metrics","json","basics","guidance","matching","verifier","processing","root","calibration",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":146,"publishedAt":30},"01M6KM40KY3QWDW5W97S39R2BC","glm-calibration","Calibration guidance for GLM tasks. Often most effective after glm-basics has clarified the setup; glm-output is the companion skill for exact final metric computation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-calibration\u002FSKILL.md",[145],{"categoryNo":83,"categoryName":84,"taxonomyType":67,"taxonomyTypeDesc":68},[147,138,128,127,133,132,129,148,149,95,150],"glm calibration","setup","companion","metric",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":30},"01M6KM3VHHVSGMGHJQB3PPT6YG","glm-basics","A good starting point for GLM calibration tasks. Use to inspect glm3.nml, confirm how GLM runs, and identify the relevant files before moving on to calibration and output evaluation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-basics\u002FSKILL.md",[],[158,128,132,159,147,138,95,127,160,25,161,162,163,164,129],"glm basics","inspect","relevant","good","use","how","Evaluation"]