引言#
学術研究において、参考文献の管理は重要でありながら時間のかかる作業です。特に論文を書く際には、異なるデータベースから文献の引用形式を取得する必要がよくあります。この問題を解決するために、私は get-bibtex
という Python ライブラリを開発しました。これにより、研究者は複数の学術データベースから迅速に BibTeX 形式の引用を取得することができます。
なぜ get-bibtex を選ぶのか?#
1. 多源サポート#
- CrossRef(最も包括的な DOI データベース)
- DBLP(計算機科学文献データベース)
- Google Scholar(API キーが必要)
2. インテリジェントなワークフロー#
from get_bibtex import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX
# ワークフローの作成
workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX("[email protected]"))
workflow.add_fetcher(DBLPBibTeX())
# バッチ処理
papers = [
"10.1145/3292500.3330919", # DOI を使用
"Attention is all you need" # タイトルを使用
]
results = workflow.get_multiple_bibtex(papers)
3. 簡単に使える#
from get_bibtex import CrossRefBibTeX
# 単一の引用取得
fetcher = CrossRefBibTeX(email="[email protected]")
bibtex = fetcher.get_bibtex("10.1145/3292500.3330919")
print(bibtex)
4. ファイルバッチ処理#
# ファイルから読み込み、保存
workflow.process_file(
input_path="papers.txt",
output_path="references.bib"
)
特徴機能#
-
インテリジェントなフォールバックメカニズム
- データソースが失敗した場合、他のデータソースを自動的に試行
- 引用情報を最大限に取得することを保証
-
進捗追跡
- tqdm を使用して処理の進捗を表示
- バッチ処理の状態を明確に把握
-
エラーハンドリング
- 詳細なログ記録
- API 制限やネットワークエラーを優雅に処理
-
フォーマット出力
- BibTeX を自動的にクリーンアップおよびフォーマット
- 出力フォーマットの一貫性を確保
使用シーン#
論文執筆#
論文を書く際に、DOI またはタイトルを使用して引用を直接取得できます:
from get_bibtex import CrossRefBibTeX
fetcher = CrossRefBibTeX()
citations = [
"Machine learning",
"Deep learning",
"10.1038/nature14539"
]
for citation in citations:
bibtex = fetcher.get_bibtex(citation)
print(bibtex)
文献レビュー#
大量の文献引用をバッチ処理:
from get_bibtex import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX
workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX())
workflow.add_fetcher(DBLPBibTeX())
# ファイルから文献リストを読み込む
workflow.process_file("papers.txt", "bibliography.bib")
注意力メカニズムに関連する論文の引用を取得#
以下の論文の引用を取得する必要があると仮定します:
- FedMSA: フェデレート学習におけるモデル選択と適応システム
- Attention Is All You Need: トランスフォーマーの画期的な研究
- Non-Local Neural Networks: 非局所神経ネットワーク
- ECA-Net: 効率的なチャネル注意メカニズム
- CBAM: 畳み込みブロック注意モジュール
DOI を通じて CrossRef を使用して取得#
from apiModels import CrossRefBibTeX
fetcher = CrossRefBibTeX(email="[email protected]")
# FedMSA
bibtex = fetcher.get_bibtex("10.3390/s22197244")
print(bibtex)
# ECA-Net
bibtex = fetcher.get_bibtex("10.1109/cvpr42600.2020.01155")
print(bibtex)
出力例:
@article{Sun_2022,
title={FedMSA: A Model Selection and Adaptation System for Federated Learning},
volume={22},
ISSN={1424-8220},
url={http://dx.doi.org/10.3390/s22197244},
DOI={10.3390/s22197244},
number={19},
journal={Sensors},
publisher={MDPI AG},
author={Sun, Rui and Li, Yinhao and Shah, Tejal and Sham, Ringo W. H. and Szydlo, Tomasz and Qian, Bin and Thakker, Dhaval and Ranjan, Rajiv},
year={2022},
month=sep,
pages={7244}
}
タイトルを通じて DBLP を使用して取得#
from apiModels import DBLPBibTeX
fetcher = DBLPBibTeX()
# CBAM
bibtex = fetcher.get_bibtex("CBAM: Convolutional Block Attention Module")
print(bibtex)
出力例:
@article{DBLP:journals/access/WangZHLL24,
author = {Niannian Wang and Zexi Zhang and Haobang Hu and Bin Li and Jianwei Lei},
title = {Underground Defects Detection Based on {GPR} by Fusing Simple Linear Iterative Clustering Phash (SLIC-Phash) and Convolutional Block Attention Module (CBAM)-YOLOv8},
journal = {{IEEE} Access},
volume = {12},
pages = {25888--25905},
year = {2024},
url = {https://doi.org/10.1109/ACCESS.2024.3365959},
doi = {10.1109/ACCESS.2024.3365959}
}
ワークフローを使用して複数の引用を取得#
from apiModels import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX
# ワークフローの作成
workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX(email="[email protected]"))
workflow.add_fetcher(DBLPBibTeX())
# クエリリストの準備
queries = [
"FedMSA: A Model Selection and Adaptation System for Federated Learning",
"Attention Is All You Need",
"Non-Local Neural Networks",
"ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks",
"CBAM: Convolutional Block Attention Module"
]
# すべての引用を取得
results = workflow.get_multiple_bibtex(queries)
# 結果を印刷
for query, bibtex in results.items():
print(f"\nクエリ: {query}")
print(f"引用:\n{bibtex if bibtex else '見つかりませんでした'}")
ファイルバッチ処理#
複数の引用を含むファイルを処理するためのワークフローを作成できます。まず、ワークフローを作成し、データソースを追加します:
from apiModels import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX
workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX(email="[email protected]"))
workflow.add_fetcher(DBLPBibTeX())
# ファイルを処理
workflow.process_file("papers.txt", "references.bib")
入力例:
papers.txt
FedMSA: A Model Selection and Adaptation System for Federated Learning
Attention Is All You Need
Non-Local Neural Networks
ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
CBAM: Convolutional Block Attention Module
出力例:
references.bib
% クエリ: FedMSA: A Model Selection and Adaptation System for Federated Learning
% ソース: CrossRefBibTeX
@article{Sun_2022, title={FedMSA: A Model Selection and Adaptation System for Federated Learning}, volume={22}, ISSN={1424-8220}, url={http://dx.doi.org/10.3390/s22197244}, DOI={10.3390/s22197244}, number={19}, journal={Sensors}, publisher={MDPI AG}, author={Sun, Rui and Li, Yinhao and Shah, Tejal and Sham, Ringo W. H. and Szydlo, Tomasz and Qian, Bin and Thakker, Dhaval and Ranjan, Rajiv}, year={2022}, month=sep, pages={7244} }
% クエリ: Attention Is All You Need
% ソース: DBLPBibTeX
@inproceedings{DBLP:conf/dac/ZhangYY21,
author = {Xiaopeng Zhang and
Haoyu Yang and
Evangeline F. Y. Young},
title = {Attentional Transfer is All You Need: Technology-aware Layout Pattern
Generation},
booktitle = {58th {ACM/IEEE} Design Automation Conference, {DAC} 2021, San Francisco,
CA, USA, December 5-9, 2021},
pages = {169--174},
publisher = {{IEEE}},
year = {2021},
url = {https://doi.org/10.1109/DAC18074.2021.9586227},
doi = {10.1109/DAC18074.2021.9586227},
timestamp = {Wed, 03 May 2023 17:06:11 +0200},
biburl = {https://dblp.org/rec/conf/dac/ZhangYY21.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
% クエリ: Non-Local Neural Networks
% ソース: CrossRefBibTeX
@article{Xu_2024, title={Adaptive selection of local and non-local attention mechanisms for speech enhancement}, volume={174}, ISSN={0893-6080}, url={http://dx.doi.org/10.1016/j.neunet.2024.106236}, DOI={10.1016/j.neunet.2024.106236}, journal={Neural Networks}, publisher={Elsevier BV}, author={Xu, Xinmeng and Tu, Weiping and Yang, Yuhong}, year={2024}, month=jun, pages={106236} }
% クエリ: ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
% ソース: CrossRefBibTeX
@inproceedings{Wang_2020, title={ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks}, url={http://dx.doi.org/10.1109/cvpr42600.2020.01155}, DOI={10.1109/cvpr42600.2020.01155}, booktitle={2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, publisher={IEEE}, author={Wang, Qilong and Wu, Banggu and Zhu, Pengfei and Li, Peihua and Zuo, Wangmeng and Hu, Qinghua}, year={2020}, month=jun, pages={11531–11539} }
% クエリ: CBAM: Convolutional Block Attention Module
% ソース: DBLPBibTeX
@article{DBLP:journals/access/WangZHLL24,
author = {Niannian Wang and
Zexi Zhang and
Haobang Hu and
Bin Li and
Jianwei Lei},
title = {Underground Defects Detection Based on {GPR} by Fusing Simple Linear
Iterative Clustering Phash (SLIC-Phash) and Convolutional Block Attention
Module (CBAM)-YOLOv8},
journal = {{IEEE} Access},
volume = {12},
pages = {25888--25905},
year = {2024},
url = {https://doi.org/10.1109/ACCESS.2024.3365959},
doi = {10.1109/ACCESS.2024.3365959},
timestamp = {Sat, 16 Mar 2024 15:09:59 +0100},
biburl = {https://dblp.org/rec/journals/access/WangZHLL24.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
インストール方法#
pip を使用:
pip install get-bibtex
Poetry を使用:
poetry add get-bibtex
ベストプラクティス#
-
メールアドレスで登録
fetcher = CrossRefBibTeX(email="[email protected]")
これにより、より良い API アクセスの優先順位を得ることができます。
-
ワークフローを適切に使用
workflow = WorkflowBuilder() workflow.add_fetcher(CrossRefBibTeX()) # 主要なソース workflow.add_fetcher(DBLPBibTeX()) # 代替ソース
信頼性の順にデータソースを追加します。
-
バッチ処理時に遅延を追加
大量の引用を処理する際は、内蔵の遅延メカニズムを使用して API 制限を回避することをお勧めします。 -
SerpAPI キーを取得
Google Scholar 機能を使用するには、SerpAPI キーが必要です。以下は取得手順です:
-
SerpAPI アカウントに登録
- SerpAPI 公式サイトにアクセス
- 右上の「Sign Up」ボタンをクリック
- 登録情報(メールアドレス、パスワードなど)を入力
-
適切なプランを選択
- 無料プラン:月に 100 回の検索
- 有料プラン:ニーズに応じて異なるレベルを選択
- テストや個人使用には、無料プランが通常十分です。
-
API キーを取得
- ログイン後、ダッシュボードにアクセス
- 「API Key」セクションでキーを見つける
- コードで使用するためにキーをコピー
-
使用例
from apiModels import GoogleScholarBibTeX # Google Scholar 取得器の初期化 fetcher = GoogleScholarBibTeX(api_key="your-serpapi-key") # 引用を取得 bibtex = fetcher.get_bibtex("Deep learning with differential privacy") print(bibtex)
-
注意事項
- API キーを保護し、公開しない
- 使用量を監視し、制限を超えないようにする
- リクエスト間隔を適切に設定(推奨は少なくとも 1 秒)
- 本番環境では、環境変数に API キーを保存する
import os api_key = os.getenv("SERPAPI_KEY") fetcher = GoogleScholarBibTeX(api_key=api_key)
-
使用の推奨
- CrossRef と DBLP を優先的に使用
- 結果が見つからない場合のみ Google Scholar を使用
- バッチ処理時は API 使用制限に注意
# 推奨されるワークフローの順序 workflow = WorkflowBuilder() workflow.add_fetcher(CrossRefBibTeX(email="[email protected]")) workflow.add_fetcher(DBLPBibTeX()) workflow.add_fetcher(GoogleScholarBibTeX(api_key="your-serpapi-key"))
-
未来の展望#
- より多くのデータソースをサポート
- 引用形式変換機能の追加
- グラフィカルユーザーインターフェースの提供
- より多くのカスタマイズオプションのサポート
結語#
get-bibtex
は学術執筆における文献管理作業を簡素化することを目指しています。単一の論文でも文献レビューでも、効率的に文献引用を取得し管理するのに役立ちます。GitHub を通じてプロジェクト開発に参加し、提案やフィードバックをお待ちしています。
関連リンク#
- GitHub リポジトリ:get-bibtex
- 問題フィードバック:Issues
- PyPI ページ:get-bibtex
この記事は Mix Space によって xLog に同期更新されました。元のリンクは https://liuyaowen.cn/posts/person/20241231