将3D单词列表展平为2D

时间:2018-03-28 00:08:05

标签: python pandas spacy

我有一个带有文本字符串的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}}

2 个答案:

答案 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]

同样,它会为您提供首选结果。

希望它有所帮助;)