spaCy
English
Turkish
argumentation-analysis
fallacy-detection
rhetoric-analysis
nlp
bert
argument-structure
logical-reasoning
discourse-analysis
text-analysis
python
Instructions to use NextGenC/ETHOS with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- spaCy
How to use NextGenC/ETHOS with spaCy:
!pip install https://huggingface.co/NextGenC/ETHOS/resolve/main/ETHOS-any-py3-none-any.whl # Using spacy.load(). import spacy nlp = spacy.load("ETHOS") # Importing as module. import ETHOS nlp = ETHOS.load() - Notebooks
- Google Colab
- Kaggle
| # rhetoric_analyzer.py | |
| import spacy | |
| from spacy.tokens import Doc, Span, Token | |
| from typing import List | |
| import data_models # Düz yapı importu | |
| from rich.console import Console | |
| # VADER'ı import et | |
| from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer | |
| console = Console() | |
| # VADER duygu analizcisini başlat | |
| analyzer = SentimentIntensityAnalyzer() | |
| # Basit Retorik İpuçları | |
| # Güçlü Duygu Eşiği (VADER compound score için) | |
| # -1 (çok negatif) ile +1 (çok pozitif) arasında. | |
| # |score| > 0.5 genellikle belirgin bir duygu ifade eder. | |
| STRONG_SENTIMENT_THRESHOLD = 0.5 | |
| # Superlative'ler (En üstünlük belirten sıfatlar/zarflar) | |
| # spaCy'nin POS tag'lerini kullanabiliriz: 'JJS' (superlative adjective), 'RBS' (superlative adverb) | |
| SUPERLATIVE_TAGS = {"JJS", "RBS"} | |
| # Retorik Sorular (Basit: Soru işareti var mı?) | |
| # Daha gelişmiş analiz gerekir ama başlangıç için bu yeterli. | |
| def analyze_sentence_sentiment(sent: Span) -> List[data_models.Finding]: | |
| """VADER kullanarak cümlenin duygu skorunu analiz eder ve güçlü duyguları bulur.""" | |
| findings = [] | |
| # VADER'ın polarity_scores fonksiyonu bir dict döndürür: {'neg', 'neu', 'pos', 'compound'} | |
| vs = analyzer.polarity_scores(sent.text) | |
| compound_score = vs['compound'] | |
| description = None | |
| severity = "Low" # Varsayılan | |
| if compound_score >= STRONG_SENTIMENT_THRESHOLD: | |
| description = f"Sentence potentially expresses strong positive sentiment (VADER score: {compound_score:.2f})." | |
| severity = "Medium" | |
| elif compound_score <= -STRONG_SENTIMENT_THRESHOLD: | |
| description = f"Sentence potentially expresses strong negative sentiment (VADER score: {compound_score:.2f})." | |
| severity = "Medium" | |
| if description: | |
| findings.append(data_models.Finding( | |
| finding_type="RhetoricalDevice", | |
| description=description, | |
| severity=severity, | |
| span_start=sent.start_char, | |
| span_end=sent.end_char, | |
| details={"device_type": "Strong Sentiment", "vader_score": vs} | |
| )) | |
| return findings | |
| def detect_superlatives(sent: Span) -> List[data_models.Finding]: | |
| """Cümlede superlative (en üstünlük) ifadeleri arar.""" | |
| findings = [] | |
| superlative_words = [] | |
| for token in sent: | |
| if token.tag_ in SUPERLATIVE_TAGS: | |
| superlative_words.append(token.text) | |
| if superlative_words: | |
| findings.append(data_models.Finding( | |
| finding_type="RhetoricalDevice", | |
| description=f"Use of superlative(s) detected: {', '.join(superlative_words)}.", | |
| severity="Low", # Tek başına zayıf bir gösterge | |
| span_start=sent.start_char, | |
| span_end=sent.end_char, | |
| details={"device_type": "Superlative", "words": superlative_words} | |
| )) | |
| return findings | |
| def detect_rhetorical_questions(sent: Span) -> List[data_models.Finding]: | |
| """Cümlede soru işareti olup olmadığını kontrol eder (çok basit).""" | |
| findings = [] | |
| if sent.text.strip().endswith("?"): | |
| findings.append(data_models.Finding( | |
| finding_type="RhetoricalDevice", | |
| description="Sentence ends with a question mark (potential rhetorical question).", | |
| severity="Low", # Bağlam olmadan bilmek zor | |
| span_start=sent.start_char, | |
| span_end=sent.end_char, | |
| details={"device_type": "Potential Question"} | |
| )) | |
| return findings | |
| def simple_rhetoric_analyzer(doc: Doc) -> List[data_models.Finding]: | |
| """ | |
| Metindeki cümleleri basit kurallarla analiz ederek potansiyel retorik araçları bulur. | |
| """ | |
| all_findings = [] | |
| for sent in doc.sents: | |
| # Her cümle için retorik kontrollerini çalıştır | |
| all_findings.extend(analyze_sentence_sentiment(sent)) | |
| all_findings.extend(detect_superlatives(sent)) | |
| all_findings.extend(detect_rhetorical_questions(sent)) | |
| # Buraya diğer retorik fonksiyon çağrıları eklenebilir | |
| console.print(f" -> Simple Rhetoric Analyzer found {len(all_findings)} potential rhetorical indicators.", style="dim") | |
| return all_findings |