A resposta curta: Sim, mas é mais difícil do que você pensa.
A resposta longa: O código comum de localizar e substituir opera em um nível morfológico, isto é, olhando para a forma de um texto em vez de entender seu significado. Mas não há indicação morfológica para diferenciar os casos objetivos e possessivos do pronome feminino de terceira pessoa, de modo que o achado e o substituto comuns não podem dizer a diferença entre eles. Para fazer isso, você precisa de uma ferramenta que possa analisar seu texto em um nível léxico - isto é, um que possa examinar o texto e derivar seu significado.
Esse é um problema muito mais difícil do que localizar e substituir, a menos que o domínio do problema esteja restrito o suficiente para que você possa hackear algumas heurísticas e, em seguida, inspecionar e corrigir manualmente o resultado. Se você puder se safar disso, ótimo!
Se não, e é um problema que vale o esforço de escrever código para fazer o trabalho corretamente, então você deve iniciar com o repositório de software do Stanford NLP Project , especificamente o CoreNLP, que inclui um excelente tagger de fala - a ferramenta exata que você precisa para executar a análise lexical que descrevi.
Para produzir um exemplo do que você obtém do CoreNLP, eu forneci a demonstração on-line do CoreNLP a seguinte frase, com base nos seus exemplos:
He calls her and tells her that her car is ready for pickup.
que é tokenized assim:
Id Word Lemma Char begin Char end POS NER Normalized NER Speaker
—— —————— —————— —————————— ———————— ———— ——— —————————————— ———————
1 He he 0 2 PRP O PER0
2 calls call 3 8 VBZ O PER0
3 her she 9 12 PRP O PER0
4 and and 13 16 CC O PER0
5 tells tell 17 22 VBZ O PER0
6 her she 23 26 PRP$ O PER0
7 that that 27 31 DT O PER0
8 her she 32 35 PRP$ O PER0
9 car car 36 39 NN O PER0
10 is be 40 42 VBZ O PER0
11 ready ready 43 48 JJ O PER0
12 for for 49 52 IN O PER0
13 pickup pickup 53 59 NN O PER0
14 . . 59 60 . O PER0
Com referência a uma lista das tags de palavras de voz padrão de fato , descobrimos que a CoreNLP identificou corretamente o caso de cada pronome em que estamos interessados - PRP para pronomes pessoais, PRP $ para pronomes possessivos.
Munidos dessa informação, e do conhecimento dos equivalentes de gênero oposto de cada caso de pronome, poderíamos realizar nossas substituições; na verdade, como o CoreNLP nos diz posições de caráter e partes da fala, em vez de uma semântica de localizar e substituir, podemos realmente analisar a frase palavra-por-palavra, preenchendo o espaço entre as palavras e substituindo os pronomes de interesse como nós os encontramos.
E é assim que você pode fazer isso! Obviamente, isso é mais ou menos o tratamento mais leve possível de um assunto tão complexo - mas, se você estiver inclinado a escrever o código necessário, isso deve ser o suficiente para colocá-lo nos blocos iniciais. Boa sorte!