Я постараюсь прояснить себя настолько, насколько это возможно: у меня есть 50k твитов, на которых я хотел бы заниматься анализом текста, и я хотел бы улучшить свой код.Данные выглядят так, как показано ниже (sample_data
).
Я заинтересован в том, чтобы лемматизировать слова, которые я очистил и токенизировал (которые являются значениями клавиш twToken
)
sample_data = [{'twAuthor': 'Jean Lassalle',
'twMedium': 'iPhone',
'nFav': None,
'nRT': '33',
'isRT': True,
'twText': ' RT @ColPeguyVauvil : @jeanlassalle "allez aux bouts de vos rêves" ',
'twParty': 'Résistons!',
'cleanText': ' rt colpeguyvauvil jeanlassalle allez aux bouts de vos rêves ',
'twToken': ['colpeguyvauvil', 'jeanlassalle', 'allez', 'bouts', 'rêves']},
{'twAuthor': 'Jean-Luc Mélenchon',
'twMedium': 'Twitter Web Client',
'nFav': '806',
'nRT': '375',
'isRT': False,
'twText': ' (2/2) Ils préfèrent créer une nouvelle majorité cohérente plutôt que les alliances à géométrie variable opportunistes de leur direction. ',
'twParty': 'La France Insoumise',
'cleanText': ' 2 2 ils préfèrent créer une nouvelle majorité cohérente plutôt que les alliances à géométrie variable opportunistes de leur direction ',
'twToken': ['2', '2', 'préfèrent', 'créer', 'nouvelle', 'majorité', 'cohérente', 'plutôt', 'alliances', 'géométrie', 'variable', 'opportunistes', 'direction']},
{'twAuthor': 'Nathalie Arthaud',
'twMedium': 'Android',
'nFav': '37',
'nRT': '24',
'isRT': False,
'twText': ' #10mai Commemoration fin de l esclavage. Reste à supprimer l esclavage salarial defendu par #Macron et Hollande ',
'twParty': 'Lutte Ouvrière',
'cleanText': ' 10mai commemoration fin de l esclavage reste à supprimer l esclavage salarial defendu par macron et hollande ',
'twToken': ['10mai', 'commemoration', 'fin', 'esclavage', 'reste', 'supprimer', 'esclavage', 'salarial', 'defendu', 'macron', 'hollande']
}]
Однако в Python нет надежных французских лемматизаторов.Поэтому я использовал некоторые ресурсы, чтобы иметь свой собственный словарь лемматизации французских слов.Диктовка выглядит следующим образом:
sample_lemmas = [{"ortho":"rêves","lemme":"rêve","cgram":"NOM"},
{"ortho":"opportunistes","lemme":"opportuniste","cgram":"ADJ"},
{"ortho":"préfèrent","lemme":"préférer","cgram":"VER"},
{"ortho":"nouvelle","lemme":"nouveau","cgram":"ADJ"},
{"ortho":"allez","lemme":"aller","cgram":"VER"},
{"ortho":"défendu","lemme":"défendre","cgram":"VER"}]
Так что ortho
является письменной формой слова (например, обработано ), lemme
является лемматизированной формой слова (например, process ) и cgram
- грамматическая категория слова (например, VER для глагола).
Итак, я хотел создатьtwLemmas
ключ для каждого твита, который является списком лемм, полученных из списка twToken
.Таким образом, я перебираю каждый твит в sample_data
, затем перебираю каждый токен в twToken
, проверяю, существует ли токен в моем словаре лемм sample_lemmas
, и если это так, я получаю лемму из словаря sample_lemmas
и добавьте его в список, который будет вводиться каждой клавишей twLemmas
.Если этого не произойдет, я просто добавлю слово в список.
Мой код следующий:
list_of_ortho = [] #List of words used to compare if a token doesn't exist in my lemmas dictionary
for wordDict in sample_lemmas: #This loop feeds this list with each word
list_of_ortho.append(wordDict["ortho"])
for elemList in sample_data: #Here I iterate over each tweet in my data
list_of_lemmas = [] #This is the temporary list which will be the value to each twLemmas key
for token in elemList["twToken"]: #Here, I iterate over each token/word of a tweet
for wordDict in sample_lemmas:
if token == wordDict["ortho"]:
list_of_lemmas.append(wordDict["lemme"])
if token not in list_of_ortho: #And this is to add a word to my list if it doesn't exist in my lemmas dictionary
list_of_lemmas.append(token)
elemList["lemmas"] = list_of_lemmas
sample_data
Цикл работает нормально, однако для его завершения требуется около 4 часов.Теперь я знаю, что я не программист и не эксперт по Python, и я знаю, что это займет время, несмотря ни на что.Однако именно поэтому я хотел спросить вас, есть ли у кого-нибудь лучшее представление о том, как я могу улучшить свой код?
Спасибо, если кто-нибудь может найти время, чтобы понять мой код и помочь мне.Я надеюсь, что я достаточно ясно (английский не мой родной язык извините).