我是Python的新手,一直在看Kaggle上的文本清理示例,例如this,并且对词干和停用词部分有一些疑问。
for sentence in final_X:
sentence = sentence.lower() # Converting to lowercase
cleanr = re.compile('<.*?>')
sentence = re.sub(cleanr, ' ', sentence) #Removing HTML tags
sentence = re.sub(r'[?|!|\'|"|#]',r'',sentence)
sentence = re.sub(r'[.|,|)|(|\|/]',r' ',sentence) #Removing Punctuations
cleanr = re.compile('<.*?>')
是什么意思?我了解它是用来删除HTML标记的,但是我对<.*?>
的含义感到困惑。
答案 0 :(得分:2)
<.*?>
被称为正则表达式模式。此模式特别先寻找<
,然后再寻找任意数量的字符.*
,后跟>
。
句点.
表示“任何字符”,星号*
表示“ 0次或多次”。 ?
后面的问号*
是惰性量词,表示它应消耗尽可能少的字符。对于这样的情况,这很重要:
<p> 2 > 1 </p>
如果问号不存在,则模式将与此匹配:
<p> 2 > 1 </p>
如果问题在此处,它将查找像>
之后的第一个<
:
<p>
2 > 1
</p>
,这是理想的结果
答案 1 :(得分:0)
这是一个 regex 模式。此模式<.*?>
表示一个字符串,其中包含<
,后跟任意字符(按点编码),重复任意次(按星号编码),最后>
在星号后的问号就是让它变得懒惰,即比赛在>
之后遇到的第一个<
处停止。
请参见https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285,以了解有关正则表达式的更多信息。
实际上可以是
sentence = re.sub('<.*?>', ' ', sentence)
代替
cleanr = re.compile('<.*?>')
sentence = re.sub(cleanr, ' ', sentence)
否则cleanr = re.compile('<.*?>')
应该在for
循环之前进行优化。