在文本预处理中,缩写不识别单引号和双引号
In text preprocessing, Contractions are not recognising single and double quotes
我正在对文章文本进行文本预处理。
在我的预处理代码中,其中一个步骤是缩略语,我试图在其中扩展“我已经”、“我是”等词。
但是我遇到了一个问题,即当我键入示例文本但我没有处理我的文本时,收缩正在起作用。
我也知道原因。原因是字体有差异。
例如示例文本:
“我来这里是因为需要一位内阁部长。”
下面是相同的文字,但我自己写的:
"I'm here because a Cabinet minister is needed."
如果你仔细看,你会发现引号的不同(单引号和双引号)。
如何解决这个问题?
下面是我用于收缩的代码。
def expand_contractions(row, contraction_mapping=CONTRACTION_MAP):
Japan_3 = row['Articles']
Japan_3 = Japan_3.apply(lambda x: str(x).replace("’", "'"))
contractions_pattern = re.compile('({})'.format('|'.join(contraction_mapping.keys())),
flags=re.IGNORECASE | re.DOTALL)
def expand_match(contraction):
match = contraction.group(0)
first_char = match[0]
expanded_contraction = contraction_mapping.get(match) \
if contraction_mapping.get(match) \
else contraction_mapping.get(match.lower())
expanded_contraction = first_char + expanded_contraction[1:]
return expanded_contraction
expanded_text = contractions_pattern.sub(expand_match, Japan_3)
expanded_text = re.sub("'", "", expanded_text)
return expanded_text
Japan['expanded_text'] = Japan.apply(expand_contractions, axis=1)
更改代码后出现以下错误:
AttributeError: ("'str' object has no attribute 'apply'", 'occurred at
index 0')
我不知道如何用一种不那么令人困惑的方式来解释它。
提前致谢!
一种解决方法是将所有错误的收缩标记替换为正确的收缩标记。在您的情况下,这可以通过将替换函数应用于 Pandas Dataframe:
中的 Article 列来完成
Japan_3 = Japan_3.apply(lambda x:str(x).replace("’","'"))
我无法测试你的函数,因为我没有你作为参数传递的收缩映射。但我的猜测是,你可以在 Japan_3 = row['Articles']
之后添加那段代码。然后像往常一样执行其余的收缩。事实上,我会这样调用函数:
expand_contractions(Japan, contraction_mapping=CONTRACTION_MAP)
但是,老实说,我不确切知道您在该代码中试图做什么来消除缩略语。公平地说,为了扩展缩略语,我只替换文本中的每一个,但它们的扩展形式。以下是我要做的。不过,我没有对其进行测试,因此它可能无法正常工作,但我想它是相似的。
CONTRACTION_MAP = {"I'm":"I am"} # contraction definition. This is just an example, please change it here with your contractions
Japan["Article"] = Japan["Article"].apply(lambda x:str(x).replace("’","'")) # replace the wrong quotation mark by the correct one
for contraction in CONTRACTION_MAP:
Japan["Article"] = Japan["Article"].apply(lambda x:str(x).replace(contraction,CONTRACTION_MAP[contraction])) # in this case I'm just replacing the contraction by the expanded form. I iterate it through all the possible contractions
我正在对文章文本进行文本预处理。 在我的预处理代码中,其中一个步骤是缩略语,我试图在其中扩展“我已经”、“我是”等词。 但是我遇到了一个问题,即当我键入示例文本但我没有处理我的文本时,收缩正在起作用。 我也知道原因。原因是字体有差异。 例如示例文本:
“我来这里是因为需要一位内阁部长。”
下面是相同的文字,但我自己写的:
"I'm here because a Cabinet minister is needed."
如果你仔细看,你会发现引号的不同(单引号和双引号)。
如何解决这个问题?
下面是我用于收缩的代码。
def expand_contractions(row, contraction_mapping=CONTRACTION_MAP):
Japan_3 = row['Articles']
Japan_3 = Japan_3.apply(lambda x: str(x).replace("’", "'"))
contractions_pattern = re.compile('({})'.format('|'.join(contraction_mapping.keys())),
flags=re.IGNORECASE | re.DOTALL)
def expand_match(contraction):
match = contraction.group(0)
first_char = match[0]
expanded_contraction = contraction_mapping.get(match) \
if contraction_mapping.get(match) \
else contraction_mapping.get(match.lower())
expanded_contraction = first_char + expanded_contraction[1:]
return expanded_contraction
expanded_text = contractions_pattern.sub(expand_match, Japan_3)
expanded_text = re.sub("'", "", expanded_text)
return expanded_text
Japan['expanded_text'] = Japan.apply(expand_contractions, axis=1)
更改代码后出现以下错误:
AttributeError: ("'str' object has no attribute 'apply'", 'occurred at index 0')
我不知道如何用一种不那么令人困惑的方式来解释它。
提前致谢!
一种解决方法是将所有错误的收缩标记替换为正确的收缩标记。在您的情况下,这可以通过将替换函数应用于 Pandas Dataframe:
中的 Article 列来完成Japan_3 = Japan_3.apply(lambda x:str(x).replace("’","'"))
我无法测试你的函数,因为我没有你作为参数传递的收缩映射。但我的猜测是,你可以在 Japan_3 = row['Articles']
之后添加那段代码。然后像往常一样执行其余的收缩。事实上,我会这样调用函数:
expand_contractions(Japan, contraction_mapping=CONTRACTION_MAP)
但是,老实说,我不确切知道您在该代码中试图做什么来消除缩略语。公平地说,为了扩展缩略语,我只替换文本中的每一个,但它们的扩展形式。以下是我要做的。不过,我没有对其进行测试,因此它可能无法正常工作,但我想它是相似的。
CONTRACTION_MAP = {"I'm":"I am"} # contraction definition. This is just an example, please change it here with your contractions
Japan["Article"] = Japan["Article"].apply(lambda x:str(x).replace("’","'")) # replace the wrong quotation mark by the correct one
for contraction in CONTRACTION_MAP:
Japan["Article"] = Japan["Article"].apply(lambda x:str(x).replace(contraction,CONTRACTION_MAP[contraction])) # in this case I'm just replacing the contraction by the expanded form. I iterate it through all the possible contractions