Files
2025-11-29 18:26:03 +08:00

237 lines
6.5 KiB
Python
Executable File

#!/usr/bin/env python3
"""
IEEE Reference Formatter
This script helps format academic references according to IEEE citation style.
It provides templates and validation for common reference types.
"""
def format_journal_article(authors, title, journal, volume, number, pages, month, year, doi=None):
"""
Format a journal article reference in IEEE style.
Args:
authors: List of author names in "F. Lastname" format
title: Article title
journal: Journal name (abbreviated per IEEE standards)
volume: Volume number
number: Issue number
pages: Page range as "XX-XX"
month: Month abbreviation (Jan., Feb., etc.)
year: Publication year
doi: Optional DOI
Returns:
Formatted IEEE reference string
"""
# Format author list
if len(authors) <= 6:
author_str = ', '.join(authors[:-1]) + (' and ' if len(authors) > 1 else '') + authors[-1]
else:
author_str = authors[0] + ' et al.'
# Build reference
ref = f'{author_str}, "{title}," {journal}, vol. {volume}, no. {number}, pp. {pages}, {month} {year}'
if doi:
ref += f', doi: {doi}'
return ref + '.'
def format_conference_paper(authors, title, conference, city, country, year, pages, doi=None):
"""
Format a conference paper reference in IEEE style.
Args:
authors: List of author names in "F. Lastname" format
title: Paper title
conference: Conference name (abbreviated)
city: Conference city
country: Conference country
year: Publication year
pages: Page range as "XX-XX"
doi: Optional DOI
Returns:
Formatted IEEE reference string
"""
# Format author list
if len(authors) <= 6:
author_str = ', '.join(authors[:-1]) + (' and ' if len(authors) > 1 else '') + authors[-1]
else:
author_str = authors[0] + ' et al.'
# Build reference
ref = f'{author_str}, "{title}," in Proc. {conference}, {city}, {country}, {year}, pp. {pages}'
if doi:
ref += f', doi: {doi}'
return ref + '.'
def format_book(authors, title, edition, city, state, publisher, year):
"""
Format a book reference in IEEE style.
Args:
authors: List of author names in "F. Lastname" format
title: Book title
edition: Edition (e.g., "2nd ed." or None for first edition)
city: Publisher city
state: Publisher state/country abbreviation
publisher: Publisher name
year: Publication year
Returns:
Formatted IEEE reference string
"""
# Format author list
if len(authors) <= 6:
author_str = ', '.join(authors[:-1]) + (' and ' if len(authors) > 1 else '') + authors[-1]
else:
author_str = authors[0] + ' et al.'
# Build reference
edition_str = f', {edition}' if edition else ''
ref = f'{author_str}, {title}{edition_str}. {city}, {state}: {publisher}, {year}'
return ref + '.'
def format_website(authors, title, website, url, access_date):
"""
Format a website reference in IEEE style.
Args:
authors: List of author names in "F. Lastname" format or None
title: Page/article title
website: Website name
url: Full URL
access_date: Access date as "Month Day, Year"
Returns:
Formatted IEEE reference string
"""
if authors:
if len(authors) <= 6:
author_str = ', '.join(authors[:-1]) + (' and ' if len(authors) > 1 else '') + authors[-1]
else:
author_str = authors[0] + ' et al.'
author_str += '. '
else:
author_str = ''
ref = f'{author_str}"{title}." {website}. {url} (accessed {access_date})'
return ref + '.'
def validate_author_format(author):
"""
Check if author name follows IEEE format (F. Lastname or F. M. Lastname).
Args:
author: Author name string
Returns:
Boolean indicating if format is valid
"""
parts = author.split()
# Should have at least 2 parts (initial and lastname)
if len(parts) < 2:
return False
# Check that all but last part are initials (single letter + period)
for part in parts[:-1]:
if len(part) != 2 or part[1] != '.':
return False
return True
def month_abbreviation(month):
"""
Convert full month name to IEEE abbreviation.
Args:
month: Full month name
Returns:
IEEE-style abbreviated month
"""
months = {
'january': 'Jan.',
'february': 'Feb.',
'march': 'Mar.',
'april': 'Apr.',
'may': 'May',
'june': 'Jun.',
'july': 'Jul.',
'august': 'Aug.',
'september': 'Sep.',
'october': 'Oct.',
'november': 'Nov.',
'december': 'Dec.'
}
return months.get(month.lower(), month)
# Example usage
if __name__ == "__main__":
print("IEEE Reference Formatter Examples\n")
# Journal article example
print("Journal Article:")
journal_ref = format_journal_article(
authors=["J. Smith", "R. Johnson", "M. Williams"],
title="Deep learning approaches for medical image analysis",
journal="IEEE Trans. Med. Imaging",
volume="42",
number="3",
pages="234-245",
month="Mar.",
year="2023",
doi="10.1109/TMI.2023.1234567"
)
print(f"[1] {journal_ref}\n")
# Conference paper example
print("Conference Paper:")
conf_ref = format_conference_paper(
authors=["P. Kumar", "S. Patel"],
title="Machine learning for network optimization",
conference="IEEE Int. Conf. Commun. (ICC)",
city="Rome",
country="Italy",
year="2023",
pages="456-461"
)
print(f"[2] {conf_ref}\n")
# Book example
print("Book:")
book_ref = format_book(
authors=["D. Patterson", "J. Hennessy"],
title="Computer Architecture: A Quantitative Approach",
edition="6th ed.",
city="Cambridge",
state="MA, USA",
publisher="Morgan Kaufmann",
year="2017"
)
print(f"[3] {book_ref}\n")
# Website example
print("Website:")
web_ref = format_website(
authors=["T. Brown"],
title="Language models are few-shot learners",
website="OpenAI Blog",
url="https://openai.com/blog/gpt-3",
access_date="Jan. 15, 2023"
)
print(f"[4] {web_ref}\n")