Analyzing Epithets for 'Love' in Tsvetaeva's Poetry Using SpaCy
Marina Tsvetaeva often characterizes 'love' through metaphors and nouns rather than standard adjectives in her lyric poetry. An analysis of her complete works (707,487 characters) in Python identified 281 epithet complexes surrounding the word 'love'. The SpaCy library was used to extract dependencies within a contextual window of ±4 tokens.
Extracting Epithets
The analyze_epithets function processes text through a SpaCy model, focusing on the children tokens of 'love' (token.children). Function words are filtered out, while nouns, full and short adjectives, and participles are extracted. The contextual window excludes the target token itself.
def analyze_epithets(text):
doc = nlp(text)
results = {'adj_full': [], 'adj_short': [], 'noun': [],
'participle': [], 'other': []}
complexes = []
for token in doc:
if token.lemma_.lower() == 'love':
children = list(token.children)
window_start = max(0, token.i - 4)
window_end = min(len(doc), token.i + 5)
window_tokens = [doc[i] for i in range(window_start, window_end)
if i != token.i]
potential_epithets = []
Distribution of epithets:
- Nouns: 179 (63.7%) — metaphors like 'love is flesh and blood' dominate.
- Full adjectives: 81 (28.8%).
- Participles: 10 (3.6%).
- Short adjectives: 8 (2.8%).
This distinguishes Tsvetaeva from typical Russian poetry: instead of descriptive adjectives, she uses nouns to equate concepts.
Frequent lemmas include 'third' (7 instances), highlighting the motif of a love triangle with a third element (time, fate, poetry).
Positional Analysis
The analyze_position function examines the relative position of 'love' within sentences. The theory of strong positions (beginning/end) is partially confirmed.
def analyze_position(doc, target_word='love'):
position_data = []
for sent in doc.sents:
love_tokens = [t for t in sent if t.lemma_.lower() == target_word]
if love_tokens:
sent_len = len(sent)
for token in love_tokens:
token_idx = token.i - sent.start
rel_pos = token_idx / sent_len if sent_len > 0 else 0
position_data.append({
'sentence_len': sent_len,
'relative_position': rel_pos
})
return pd.DataFrame(position_data)
Results from 191 sentences:
- Average position: 0.473.
- Beginning (0.0–0.2): 50 (26.2%).
- Middle (0.2–0.8): 108 (56.5%).
- End (0.8–1.0): 33 (17.3%).
- Strong positions: 43.5%.
The word is integrated into the fabric of the verse rather than being highlighted declaratively.
Sentence Length Analysis
Sentences containing 'love' are longer than average:
all_sent_lengths = [len(sent) for sent in doc.sents]
avg_len_all = sum(all_sent_lengths) / len(all_sent_lengths)
sentences_with_love = [len(sent) for sent in doc.sents
if any(t.lemma_.lower() == 'love' for t in sent)]
avg_len_love = sum(sentences_with_love) / len(sentences_with_love)
- Overall average length: 15.3 tokens.
- With 'love': 21 tokens.
Love requires an expanded context and cannot be reduced to aphorisms.
Key Takeaways
- Epithets for 'love' are predominantly nouns (63.7%), enhancing metaphorical richness.
- The 'third' motif in 7 instances emphasizes the complexity of emotions.
- The word's position tends toward the middle of sentences (56.5%), integrating it into the narrative.
- Sentences with 'love' are 37% longer than average, requiring explanation.
- SpaCy effectively extracts dependencies for philological NLP analysis.
This approach is applicable to any poetry corpus: adjusting the window, lemmatization, and POS filters provide quantifiable insights into style.
— Editorial Team
No comments yet.