我有一个带有文本字符串的pandas列。为简单起见,我们假设我有一个包含两个字符串的列。
[["How", "are","you"],["Don't", "wait", "for", "me"],["this","is","all","fine"]]
我想得到这样的东西:
nlp=spacy.load('en')
def text_to_words(x):
""" This function converts sentences in a text to a list of words
"""
global log_txt
x=re.sub("\s\s+" , " ", x.strip())
txt_to_words= [str(doc).replace(".","").split(" ") for doc in nlp(x).sents]
#log_txt=log_txt.extend(txt_to_words)
return txt_to_words
基本上将文档和标记主义的每个句子都放入单词列表中。所以最后我需要一个字符串列表列表。
我尝试使用如下地图:
log_txt=list(map(text_to_words,s))
log_txt
来自spacy的nlp用于将一串文本拆分为句子列表。
[[['How', 'are', 'you'], ["Don't", 'wait', 'for', 'me']],
[['this', 'is', 'all', 'fine']]]
但是你知道这会将两个文件的所有结果都放到另一个列表中
{{1}}
答案 0 :(得分:1)
您需要嵌套列表理解。此外,您可以使用re.sub
删除标点符号。
import re
data = ["How are you. Don't wait for me", "this is all fine"]
words = [
re.sub([^a-z\s], '', j.lower()).split() for i in data for j in nlp(i).sents
]
或者,
words = []
for i in data:
... # do something here
for j in nlp(i).sents:
words.append(re.sub([^a-z\s], '', j.lower()).split())
答案 1 :(得分:0)
列表理解有一种更简单的方法。 您可以先使用句点加入字符串。'并再次拆分它们。
[x.split() for x in '.'.join(s).split('.')]
它会给出理想的结果。
[["How", "are","you"],["Don't", "wait", "for", "me"],["this","is","all","fine"]]
对于Pandas数据帧,您可能会获得一个对象,因此返回tolist
函数后的列表列表。只需提取第一个元素。
例如,
import pandas as pd
def splitwords(s):
s1 = [x.split() for x in '.'.join(s).split('.')]
return s1
df = pd.DataFrame(s)
result = df.apply(splitwords).tolist()[0]
同样,它会为您提供首选结果。
希望它有所帮助;)