Как обнаружить стоп-слово в заданной строке и преобразовать только это стоп-слово из строчных или прописных букв в строчные - PullRequest
0 голосов
/ 16 марта 2020

У меня есть следующий код

import nltk
from nltk.corpus import stopwords
nltk.download('stopwords')
import re
text='Director Of IT'
pattern = re.compile(r'\b(' + r'|'.join(stopwords.words('english'))+ r')\b\s*') #remove stop words
textmod5 = pattern.sub('', text)
print(textmod5)

Я хотел бы сделать только стоп-слово «Of» в нижнем регистре «of». Как добиться этого, используя то же выражение выше.

Я пробовал следующее, но безрезультатно

pattern = re.compile(r'\b(' + r'|'.join(stopwords.words('english'))+ r')\b\s*'.lower)
pattern = re.compile(r'\b(' + r'|'.join(stopwords.words.lower(('english')))+ r')\b\s*')

Каков будет правильный шаблон для достижения моей цели

Токовый выход: директор IT

Требуемый выход: директор IT

1 Ответ

0 голосов
/ 16 марта 2020

Здесь я вижу еще одну проблему: как вы различаете guish между IT, который не следует трогать, и it, который находится в вашем списке стоп-слов при преобразовании в нижний регистр или используя флаг игнорирования регистра?

Вы можете использовать функцию замены в паре со списком слов, которые следует поместить в нижний регистр, и другим списком слов, которые следует игнорировать. Это также потребует добавления флага игнорирования регистра в ваше выражение и небольшого изменения интервала. Например:

import nltk
from nltk.corpus import stopwords
nltk.download('stopwords')
import re

def remove_or_lower(m):
    exceptions = ['of'] # put these in lower case
    ignored = ['IT'] # don't touch these
    cap = m.group(1) # captured
    cap_str = cap.strip()
    low = cap.lower() # lowered
    low_str = low.strip()
    return low if low_str in exceptions else cap if cap_str in ignored else ''

text = 'Director Of IT'
pattern = re.compile(r'(\b(?:' + r'|'.join(stopwords.words('english')) + r')\b\s*)', flags=re.IGNORECASE) #remove stop words
textmod5 = pattern.sub(remove_or_lower, text)

print(textmod5)

Вывод:

Director of IT
...