Back to Home

Epithets for «love» in Tsvetaeva: SpaCy analysis

The article describes NLP analysis of Marina Tsvetaeva's lyrics with focus on epithets for the word «love». 281 complexes identified, predominantly nouns, triangle motif and statistics of positions/sentence lengths. Code on SpaCy provided for reproduction.

SpaCy against Tsvetaeva: secrets of love epithets
Advertisement 728x90

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:

Google AdInline article slot
  • 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.

Google AdInline article slot
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:

Google AdInline article slot
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

Advertisement 728x90

Read Next