#python-3.x #str-replace
Вопрос:
Чтобы понять значения каждой переменной, я улучшил скрипт для замены из класса Udacity. Я преобразую коды в функции в обычные коды. Однако мои коды не работают, в то время как коды в функции работают. Я буду признателен, если кто-нибудь сможет это объяснить. Пожалуйста, обратите больше внимания на функцию «токенизация».
Ниже приведены коды из класса Udacity (авторское право принадлежит Udacity).
# download necessary NLTK data
import nltk
nltk.download(['punkt', 'wordnet'])
# import statements
import re
import pandas as pd
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
url_regex = 'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.amp; ]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F])) '
def load_data():
df = pd.read_csv('corporate_messaging.csv', encoding='latin-1')
df = df[(df["category:confidence"] == 1) amp; (df['category'] != 'Exclude')]
X = df.text.values
y = df.category.values
return X, y
def tokenize(text):
detected_urls = re.findall(url_regex, text) # here, "detected_urls" is a list for sure
for url in detected_urls:
text = text.replace(url, "urlplaceholder") # I do not understand why it can work while does not work in my code if I do not convert it to string
tokens = word_tokenize(text)
lemmatizer = WordNetLemmatizer()
clean_tokens = []
for tok in tokens:
clean_tok = lemmatizer.lemmatize(tok).lower().strip()
clean_tokens.append(clean_tok)
return clean_tokens
X, y = load_data()
for message in X[:5]:
tokens = tokenize(message)
print(message)
print(tokens, 'n')
Я хочу понять значения переменных в функции «tokenize ()». Ниже приведены мои коды.
X, y = load_data()
detected_urls = []
for message in X[:5]:
detected_url = re.findall(url_regex, message)
detected_urls.append(detected_url)
print("detected_urs: ",detected_urls) #output a list without problems
# replace each url in text string with placeholder
i = 0
for url in detected_urls:
text = X[i].strip()
i = 1
print("LN1.url= ",url,"ttext= ",text,"n type(text)=",type(text))
url = str(url).strip() #if I do not convert it to string, it is a list. It does not work in text.replace() below, but works in above function.
if url in text:
print("yes")
else:
print("no") #always show no
text = text.replace(url, "urlplaceholder")
print("nLN2.url=",url,"ttext= ",text,"n type(text)=",type(text),"n===============nn")
Результат показан ниже.
Выходные данные для «LN1» и «LN2» одинаковы. Условие «если» всегда выводит «нет». Я не понимаю, почему это происходит.
Любая дальнейшая помощь и советы будут высоко оценены.
Комментарии:
1. Внутри 2-го
for
цикла не могли бы вы распечатать, пожалуйстаtext
, иurl
что находится на 1 строчке вышеif
утверждения?2. @RobertKwiatkowski, Спасибо! Я добавил результаты в исходные вопросы. Пожалуйста, ознакомьтесь с ними. Еще раз спасибо!
3. @Leon вы должны были добавить их в виде текста, а не в виде изображения …
4. @Программист, мои извинения.
5. @Leon, пожалуйста, удалите изображения из своего поста и вместо этого поместите вывод в виде текста …