Source code for compass.extraction.solar.plugin

"""COMPASS solar extraction plugin"""

from compass.plugin import (
    OrdinanceExtractionPlugin,
    OutputColumn,
    register_plugin,
    normalize_website_keywords,
)
from compass.extraction.solar.ordinance import (
    SolarHeuristic,
    SolarOrdinanceTextCollector,
    SolarOrdinanceTextExtractor,
    SolarPermittedUseDistrictsTextCollector,
    SolarPermittedUseDistrictsTextExtractor,
)
from compass.extraction.solar.parse import (
    StructuredSolarOrdinanceParser,
    StructuredSolarPermittedUseDistrictsParser,
)

StructuredSolarOrdinanceParser.IN_LABEL = SolarOrdinanceTextExtractor.OUT_LABEL
StructuredSolarPermittedUseDistrictsParser.IN_LABEL = (
    SolarPermittedUseDistrictsTextExtractor.OUT_LABEL
)

SOLAR_QUERY_TEMPLATES = [
    "filetype:pdf {jurisdiction} solar energy conversion system ordinances",
    "solar energy conversion system ordinances {jurisdiction}",
    "{jurisdiction} solar energy farm ordinance",
    (
        "Where can I find the legal text for commercial solar energy "
        "conversion system zoning ordinances in {jurisdiction}?"
    ),
    (
        "What is the specific legal information regarding zoning "
        "ordinances for commercial solar energy conversion systems in "
        "{jurisdiction}?"
    ),
]


BEST_SOLAR_ORDINANCE_WEBSITE_URL_KEYWORDS = [
    "pdf",
    "secs",
    "solar",
    ["zoning", "ordinance", "regulation"],
    ["dsireusa", "windaction"],
    ["codelibrary", "amlegal", "municode", "codepublishing", "ecode360"],
    "renewable energy",
    ["plan", "planning", "permit"],
    "government",
    ["setback", "noise"],
    ["code", "area"],
    ["land development", "land use"],
    ["land", "environment", "energy", "renewable"],
    ["municipal", "department", "development", "board"],
]


[docs] class COMPASSSolarExtractor(OrdinanceExtractionPlugin): """COMPASS solar extraction plugin""" IDENTIFIER = "solar" """str: Identifier for extraction task """ QUERY_TEMPLATES = SOLAR_QUERY_TEMPLATES """list: List of search engine query templates for extraction""" WEBSITE_KEYWORDS = normalize_website_keywords( BEST_SOLAR_ORDINANCE_WEBSITE_URL_KEYWORDS ) """list: List of keywords Keywords indicate links which should be prioritized when performing a website scrape for a wind ordinance document. """ HEURISTIC = SolarHeuristic """BaseHeuristic: Class with a ``check()`` method""" TEXT_COLLECTORS = [ SolarOrdinanceTextCollector, SolarPermittedUseDistrictsTextCollector, ] """Classes for collecting wind ordinance text chunks from docs""" TEXT_EXTRACTORS = [ SolarOrdinanceTextExtractor, SolarPermittedUseDistrictsTextExtractor, ] """Class for extracting cleaned ord text from collected text""" PARSERS = [ StructuredSolarOrdinanceParser, StructuredSolarPermittedUseDistrictsParser, ] """Class for parsing structured ordinance data from text""" OUTPUT_COLUMNS = [ OutputColumn("county"), OutputColumn("state"), OutputColumn("subdivision"), OutputColumn("jurisdiction_type"), OutputColumn("FIPS"), OutputColumn("feature"), OutputColumn("value"), OutputColumn("units"), OutputColumn("adder"), OutputColumn("min_dist"), OutputColumn("max_dist"), OutputColumn("summary"), OutputColumn("ordinance_text"), OutputColumn("explanation"), OutputColumn("year"), OutputColumn("section"), OutputColumn("source"), ] """list: List of output columns for the extracted data"""
register_plugin(COMPASSSolarExtractor)