Skip to content

public/speakers.json: 高信頼Qtsマッピングの反映(model完全一致のみ)#6

Closed
sakadon with Copilot wants to merge 2 commits into
mainfrom
copilot/update-speakers-json-qts-values
Closed

public/speakers.json: 高信頼Qtsマッピングの反映(model完全一致のみ)#6
sakadon with Copilot wants to merge 2 commits into
mainfrom
copilot/update-speakers-json-qts-values

Conversation

Copilot AI commented May 12, 2026

Copy link
Copy Markdown
Contributor

PDF由来の高信頼Qts値を、public/speakers.json の該当スピーカーへ反映する対応です。指定マッピングに対して model 完全一致のエントリのみ更新し、非一致モデルは変更していません。

  • 変更概要

    • public/speakers.jsonlossFactor.Qts.value を、指定マッピングに基づいて更新。
    • 更新対象は model がキーと完全一致するエントリのみに限定。
    • lossFactor.Qts.unit は既存どおり "-" を維持。
  • 反映したモデル(完全一致)

    • FE138ES-R0.27
    • FE103E0.36
    • FE126E0.25
    • FF125K0.26
    • FF165K0.2
    • FF225K0.16
  • 非対象

    • 指定マッピングにあっても、public/speakers.json 側に同一 model が存在しないものは未変更(要件どおり)。
{
  "model": "FE103E",
  "lossFactor": {
    "Qts": { "value": 0.36, "unit": "-" }
  }
}
Original prompt

Update public/speakers.json in sakadon/digitalsignagerjp to populate lossFactor.Qts.value for the speaker models that have high-confidence Qts values extracted from PDF spec sheets.

Use the following model-to-Qts mapping:

{
  "FE138ES-R": 0.27,
  "FE163EnS": 0.23,
  "FE103E": 0.36,
  "FE108EZ": 0.3,
  "FE108S": 0.2,
  "FE126E": 0.25,
  "FE166ESR": 0.21,
  "FE168EZ": 0.26,
  "FE168S": 0.37,
  "FE206ESR": 0.19,
  "FF125K": 0.26,
  "FF165K": 0.2,
  "FF225K": 0.16
}

Requirements:

  • Only update entries in public/speakers.json whose model exactly matches one of the keys above.
  • Set lossFactor.Qts.value to the mapped numeric value.
  • Preserve lossFactor.Qts.unit as "-".
  • Do not modify other fields unless necessary for formatting consistency.
  • Leave models not listed above unchanged.
  • Create a pull request with these changes.

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: @sakadon/digitalsignagerjp/files/etc
ここにスピーカーユニットに関するカタログやSpecなどのPDFがあるんだけど、
このファイルの中から、スペックとしてQtsの値が記載されているスピーカーユニットと、そのQtsの値を抜き出したいんだけど、可能ですかね?
まずはどうすれば可能か、検討したい

Assistant: 状況を整理しますね。

現状の把握

etc/ フォルダには 40件以上のPDFファイル(さらに続きあり)が確認できました。主なファイル:

  • FOSTEXの個別スペックシートfe103e.pdf, fe108ez.pdf, fe126e.pdf, fe166e.pdf, fe168ez.pdf, FE138ES-R-1.pdf, FE163EnS_TS_Parameter.pdf など多数
  • FOSTEXカタログ類Fostex_Speaker_Components_202309.pdf, SpeakerComponent201411.pdf, FOSTEX_1991.pdf など
  • DCU シリーズDCU-F081PP.pdf, DCU-F102W.pdf, DCU-F121A.pdf など
  • その他メーカーacr_lautsprecherkatalog_*.pdf(ACR), madisound_catalog_2002-08-29.pdf(Madisound)など

課題:PDFからQtsを自動抽出する難しさ

GitHub Copilot(私)はPDFの内容を直接読むことができません。
GitHubに保存されているPDFはバイナリファイルであり、テキスト検索やコード検索の対象外です。


実現するためのアプローチ案

✅ 案1:ローカルでPythonスクリプトを使ってQtsを抽出(推奨)

PDFをローカルにcloneして、スクリプトで一括処理する方法です。

# 必要ライブラリ: pdfplumber または pdfminer.six
pip install pdfplumber

スクリプトの流れ:

  1. etc/ 内の全PDFを読み込む
  2. テキストを抽出し Qts を含む行を検索
  3. 正規表現で数値を取り出す
  4. 結果をCSVやMarkdownにまとめる

Copilotにこのスクリプトを作成させることは可能です。


案2:PDF内容をMarkdown/テキストに変換してリポジトリに追加する

各PDFをテキスト化したファイルをリポジトリに置いておけば、以降はGitHub上でも検索可能になります。


案3:手作業でQtsを知っているファイルだけ対象にする

FE163EnS_TS_Parameter.pdf(TSパラメータ専用シート)など、明らかにQtsが記載されていそうなファイルから優先的に当たる方法です。


おすすめの進め方

案1のPythonスクリプトをCopilotに作ってもらい、ローカルで実行する

これが最も確実で効率的です。
「スクリプトを作ってほしい」と言ってもらえれば、etc/ フォルダのPDFを対象にQtsを抽出してCSVに出力するスクリプトを作成します。どうしますか?

User: 案1のPythonスクリプトをCopilotに作ってもらい、ローカルで実行したいです
Macで実行します、すでにこのリポジトリはclone済みです。
PDFから抽出したデータはCSVがいいんですか?Copilotが加工しやすいデータのほうが良いなら、それに合わせますが、大丈夫ですか?

Assistant: ## 出力フォーマットについて

CSVで十分です! テキストエディタでも確認できるし、Copilotに貼り付けて追加分析も余裕です。むしろCSVが一番扱いやすいです。

では、スクリプトを作ります。


セットアップ&実行手順

1. ライブラリのインストール

pip install pdfplumber

2. スクリプトをリポジトリ直下に保存

以下のファイルを extract_qts.py として保存してください:

import pdfplumber
import re
import csv
import os
from pathlib import Path

# etcフォルダのパス(このスクリプトをリポジトリ直下に置いた場合)
PDF_DIR = Path(__file__).parent / "etc"
OUTPUT_CSV = Path(__file__).parent / "qts_results.csv"

# Qtsの値を拾う正規表現パターン群
# 例: "Qts : 0.35", "Qts=0.28", "Qts 0.41", "Qts: 0.35"
QTS_PATTERNS = [
    re.compile(r'Qts\s*[=:]\s*([\d]+\.[\d]+)', re.IGNORECASE),
    re.compile(r'Qts\s+([\d]+\.[\d]+)', re.IGNORECASE),
    # 表形式で "Qts" と数値が別セルになっている場合に備え、前後の行も考慮
    re.compile(r'\bQts\b.*?([\d]+\.[\d]+)', re.IGNORECASE),
]

def extract_qts_from_pdf(pdf_path: Path) -> list[dict]:
    results = []
    try:
        with pdfplumber.open(pdf_path) as pdf:
            full_text = ""
            for page in pdf.pages:
                text = page.extract_text()
                if text:
                    full_text += text + "\n"

            # 各行を走査してQtsを探す
            lines = full_text.splitlines()
            for i, line in enumerate(lines):
                for pattern in QTS_PATTERNS:
                    match = pattern.search(line)
                    if match:
                        qts_value = match.group(1)
                        # 前後の行もコンテキストとして取得
                        context_start = max(0, i - 1)
                        context_end = min(len(lines), i + 2)
                        context = " | ".join(lines[context_start:context_end]).strip()
                        results.append({
                            "file": pdf_path.name,
                            "qts": qts_value,
                            "context": context[:200],  # 長すぎる場合は切り詰め
                        })
                        break  # 同一行で複数パターンに重複マッチしないよう1件のみ

    except Exception as e:
        print(f"  [ERROR] {pdf_path.name}: {e}")
        results.append({
            "file": pdf_path.name,
            "qts": "ERROR",
            "context": str(e),
        })

    return results


def main():
    pdf_files = sorted(PDF_DIR.glob("*.pdf"))
    print(f"対象PDFファイル数: {len(pdf_files)}")

    all_results = []
    no_qts_files = []

    for pdf_path in pdf_files:
        print(f...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

*This pull request was created from Copilot chat.*
>

@vercel

vercel Bot commented May 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
digitalsignagerjp Ready Ready Preview, Comment May 12, 2026 7:48pm

Copilot AI changed the title [WIP] Update Qts values in speakers.json for specified models public/speakers.json: 高信頼Qtsマッピングの反映(model完全一致のみ) May 12, 2026
Copilot AI requested a review from sakadon May 12, 2026 19:49
@sakadon

sakadon commented May 13, 2026

Copy link
Copy Markdown
Owner

一旦不採用

@sakadon sakadon closed this May 13, 2026
@sakadon
sakadon deleted the copilot/update-speakers-json-qts-values branch May 13, 2026 09:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants