[英]Flattening 3D list of words to 2D
我有一列帶有文本字符串的pandas列。 為了簡單起見,假設我有一列包含兩個字符串。
s=["How are you. Don't wait for me", "this is all fine"]
我想得到這樣的東西:
[["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
spacy中的nlp用於將文本字符串拆分為句子列表。
log_txt=list(map(text_to_words,s))
log_txt
但是正如您所知,這會將兩個文檔的所有結果放入另一個列表中
[[['How', 'are', 'you'], ["Don't", 'wait', 'for', 'me']],
[['this', 'is', 'all', 'fine']]]
您將需要嵌套列表理解。 此外,您可以使用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())
有一種更簡單的列表理解方法。 您可以先用句號“。”連接字符串。 並再次拆分。
[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]
同樣,它將為您提供首選的結果。
希望能幫助到你 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.