【发布时间】:2019-12-24 23:01:06
【问题描述】:
背景
我有以下df,其中包含一个Text 列,该列已使用nltk SpaceTokenizer 标记化以保留\n
import pandas as pd
text =[list(['\n[PROV', 'REPORT]\nPerson', 'Name:', '\n','John', 'Dear\nProgram', 'Date:', '1/11/2000', '10:42', 'AM\nMR']),
list(['\nToday', 'Name:', '\n','James', 'Jay\nProgram', 'Date:', '3/11/2000', '1:45', 'PM\nmissing']),
list(['\n[NEWS', 'REPORT]\nPerson', 'Name:', '\n','Jane', 'Doe\nProgram', 'Date:', '3/11/2000', '1:45', 'PM\nMR']),
list(['\n[PROV', 'REPORT]\nPerson', 'Name:', '\n','Amy', 'Army\nProgram', 'Date:', '10/1/2000', '11:45', 'AM\nMR'])]
df = pd.DataFrame({'Text' : text,
'ID': [1,2,3,4],
'P_ID': ['A','B','C','D'],
})
df
ID P_ID Text
0 1 A [\n[PROV, REPORT]\nPerson, Name:, \n, John, Dear\nProgram, Date:, 1/11/2000, 10:42, AM\nMR]
1 2 B [\nToday, Name:, \n, James, Jay\nProgram, Date:, 3/11/2000, 1:45, PM\nmissing]
2 3 C [\n[NEWS, REPORT]\nPerson, Name:, \n, Jane, Doe\nProgram, Date:, 3/11/2000, 1:45, PM\nMR]
3 4 D [\n[PROV, REPORT]\nPerson, Name:, \n, Amy, Army\nProgram, Date:, 10/1/2000, 11:45, AM\nMR]
使用以下代码
df['Text'].values
输出
给出以下输出
array([ list(['\n[PROV', 'REPORT]\nPerson', 'Name:', '\n', 'John', 'Dear\nProgram', 'Date:', '1/11/2000', '10:42', 'AM\nMR']),
list(['\nToday', 'Name:', '\n', 'James', 'Jay\nProgram', 'Date:', '3/11/2000', '1:45', 'PM\nmissing']),
list(['\n[NEWS', 'REPORT]\nPerson', 'Name:', '\n', 'Jane', 'Doe\nProgram', 'Date:', '3/11/2000', '1:45', 'PM\nMR']),
list(['\n[PROV', 'REPORT]\nPerson', 'Name:', '\n', 'Amy', 'Army\nProgram', 'Date:', '10/1/2000', '11:45', 'AM\nMR'])], dtype=object)
目标
1) 将\n 分开(这样\n[PROV 变为\n [PROV 和REPORT]\nPerson 变为REPORT] \n Person 和Doe\nProgram 变为Doe9878Doe987654338@986等等等等)
2) 创建新列
试过
df['New_Text'] = df['Text'].replace(r'\n', ' \n ', regex=True)
期望的输出
使用以下代码
df['New_Text'].values
我想要以下输出
array([list(['\n', '[PROV', 'REPORT]', '\n' ,'Person', 'Name:', '\n', 'John', 'Dear', '\n', 'Program', 'Date:', '1/11/2000', '10:42', 'AM', '\n', 'MR']),
list(['\n', 'Today', 'Name:', '\n', 'James', 'Jay', '\n', 'Program', 'Date:', '3/11/2000', '1:45', 'PM','\n', 'missing']),
list(['\n', '[NEWS', 'REPORT]','\n', 'Person', 'Name:', '\n', 'Jane', 'Doe', '\n', 'Program', 'Date:', '3/11/2000', '1:45', 'PM', '\n', 'MR']),
list(['\n', '[PROV', 'REPORT]', '\n', 'Person', 'Name:', '\n', 'Amy', 'Army', '\n', 'Program', 'Date:', '10/1/2000', '11:45', 'AM', '\n', 'MR'])], dtype=object)
问题
如何实现我想要的输出?
【问题讨论】:
-
你能找到一些更好的东西来加载/解析你的
text吗,现在看起来很奇怪,可能会节省很多工作 -
@SamMason 文本已被标记。我认为这就是它采用这种格式的原因。当你说它看起来“非常奇怪”时,这就是你所指的吗?
-
这是什么类型的标记化?如果你在做任何类型的 NLP,我不希望在“单词”中间有换行符
-
SpaceTokenizer保留\n
标签: python regex pandas text replace