Как использовать segment() из wordsegment внутри для re.sub для извлечения слов из хэштегов в Python?
Я работаю над анализом настроений твитов с помощью Python. В процессе очистки твитов хочу извлекать слова из хэштегов. Я обнаружил, что библиотека wordsegment выполняет эту работу очень эффективно. Однако моя проблема в том, что библиотека wordsegment заняла много времени, когда я применил ее для заполнения столбцов твитов в моем наборе данных, используя
df['tweet].apply(lambda x: segment(x))
. Думаю, я могу сократить это время, применив
segment()
работа с хэштегами. Для этого я сначала создал функцию как фальшивую:
def extract_words(hashtags):
words = " ".join(segment(hashtags))
return words
а затем я попытался применить, используя
re.sub
:
df['tweet'] = df['tweet'].apply(lambda x: re.sub(r'#(\w)+', extract_words, x))
Этот код не сработал и дал мне ошибку. Что я могу сделать, чтобы применить сегмент только к хэштегам?
1 ответ
В качестве альтернативы вы можете использовать re.findall внутри своего
extract_words
функция, чтобы получить все вхождения хэштегов для каждого твита и поместить их в список. Регулярное выражение должно измениться на
(#\w+)
, поместив хэштег и один или несколько квантификаторов внутри группы захвата, это упростит последующую функцию замены. Оттуда вы можете заменить каждый найденный хэштег на результат
segment
функция для этого хэштега.
Введите sample.csv
tweets
"RT @NatGeo: Watch: When humans live on Mars, what exactly will they call home? https://xxxxxxx/QlJBuB6FX2 #CountdownToMars"
"RT @HodderBooks: With the delectable #ActsOfLove publishing tomorrow, here's @TalulahRiley�herself to tell you about her debut novel: https?"
"RT @solarimpulse: BREAKING: we flew 40'000km without fuel. It's a first for energy, take it further! #futureisclean https://xxxxxxx/JCvKTDBVZx"
"RT @TeslaRoadTrip: #TeslaRoadTrip All - thanks so much for following our twitter feed. The trip was a success and everyone has diverted ..."
"RT @TeslaMotors: Agreed. @FTC affirms States to allow consumers to choose how they buy their cars. #Tesla #Michigan http://xxxxxxx/fT1JHjMpzg""
import pandas as pd
import re
import wordsegment as ws
ws.load()
def extract_words(tweet):
hashtags = re.findall(r"(#\w+)", tweet)
for hs in hashtags:
words = " ".join(ws.segment(hs))
tweet = tweet.replace(hs, words)
return tweet
df = pd.read_csv("sample.csv")
print(df)
df['NewTweet'] = df['tweets'].apply(lambda x: extract_words(x))
print(df)
Вывод из NewTweet
RT @NatGeo: Watch: When humans live on Mars, what exactly will they call home? https://xxxxxxx/QlJBuB6FX2 countdown to mars
RT @HodderBooks: With the delectable acts of love publishing tomorrow, here's @TalulahRiley�herself to tell you about her debut novel: https?
RT @solarimpulse: BREAKING: we flew 40'000km without fuel. It's a first for energy, take it further! future is clean https://xxxxxxx/JCvKTDBVZx
RT @TeslaRoadTrip: tesla road trip All - thanks so much for following our twitter feed. The trip was a success and everyone has diverted ...
RT @TeslaMotors: Agreed. @FTC affirms States to allow consumers to choose how they buy their cars. tesla michigan http://xxxxxxx/fT1JHjMpzg