237 lines
6.5 KiB
Python
Executable File
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")
|