# Imports # # 3rd-party modules from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM import nltk from nltk import sent_tokenize from collections import Counter # Download NLTK data nltk.download('punkt') # Load a pre-trained model and tokenizer for summarization model_name = "facebook/bart-large-cnn" # You can also use "t5-base" or another model tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSeq2SeqLM.from_pretrained(model_name) # Summarization pipeline summarizer = pipeline("summarization", model=model, tokenizer=tokenizer) # Step 1: Specific Event Extraction def extract_events(text): """ Extract events from the input text. Here, sentences are considered as events. """ sentences = sent_tokenize(text) return sentences # Step 2: Event Abstraction and Generalization def abstract_events(events): """ Generalize the extracted events using a summarization model. Each event (sentence) is abstracted and summarized. """ abstracted_events = [summarizer(event, max_length=30, min_length=10, do_sample=False)[0]['summary_text'] for event in events] return abstracted_events # Step 3: Common Event Statistics def common_events(abstracted_events): """ Analyze the abstracted events to find out which events are most common. """ event_counter = Counter(abstracted_events) # Select the most common events (those that appear more than once) common_events = [event for event, count in event_counter.items() if count > 1] return common_events # Step 4: Summary Generation def generate_summary(common_events): """ Generate a concise summary from the most common events. """ combined_text = " ".join(common_events) summary = summarizer(combined_text, max_length=100, min_length=50, do_sample=False)[0]['summary_text'] return summary # Chain-of-Event Prompting Process def chain_of_event_prompting(texts): """ Full Chain-of-Event Prompting workflow: 1. Extract events from multiple texts. 2. Generalize and abstract the events. 3. Analyze the commonality of the events. 4. Generate a summary from the common events. """ all_events = [] for text in texts: events = extract_events(text) abstracted_events = abstract_events(events) all_events.extend(abstracted_events) common_events_list = common_events(all_events) summary = generate_summary(common_events_list) return summary # Example Usage if __name__ == "__main__": # Example input texts texts = [ "The company announced a new product line which will be launched next month.", "A new product line is being developed by the company, with a launch expected in the near future.", "Next month, the company plans to introduce a new series of products to the market." ] # Perform Chain-of-Event Prompting final_summary = chain_of_event_prompting(texts) print("Final Summary:", final_summary)