簡體   English   中英

將字符串拆分為兩個單詞的列表,重復最后一個單詞

[英]Split string into list of two words, repeating the last word

我需要將一個字符串分成每兩個單詞的列表,但重復每對單詞的最后一個單詞。 這是我嘗試過的,通過使用我為其他問題找到的示例:

line = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."""

def split_line(in_line):
    line_sp = line.split(" ")
    line_two = [" ".join(line_sp[i:i + 2]) for i in range(0, len(line_sp), 2)]
    return line_two

print(split_line(line))

這導致:

['Lorem ipsum', 'dolor sit', 'amet, consectetur', 'adipiscing elit,', 'sed do', 'eiusmod tempor', 'incididunt ut', 'labore et', 'dolore magna', 'aliqua.']

但我真正需要的是:

['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet', 'amet, consectetur', 'consectetur adipiscing', ...]

我怎樣才能讓它工作? 謝謝!

您可以對以下兩部分詞使用zip

words = line.split()
print(list(map(' '.join, zip(words[:-1], words[1:]))))

這輸出:

['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,', 'amet, consectetur', 'consectetur adipiscing', 'adipiscing elit,', 'elit, sed', 'sed do', 'do eiusmod', 'eiusmod tempor', 'tempor incididunt', 'incididunt ut', 'ut labore', 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.']

簡單的 for 循環

l = line.split(' ')
result = []
for i in range(len(l) - 1):
    result.append(l[i] + ' ' + l[i+1])
print(result) 
# ['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,', 'amet, consectetur', 'consectetur adipiscing', 'adipiscing elit,', 'elit, sed', 'sed do', 'do eiusmod', 'eiusmod tempor', 'tempor incididunt', 'incididunt ut', 'ut labore', 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.', 'Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,', 'amet, consectetur', 'consectetur adipiscing', 'adipiscing elit,', 'elit, sed', 'sed do', 'do eiusmod', 'eiusmod tempor', 'tempor incididunt', 'incididunt ut', 'ut labore', 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.']

你要找的是nltk.bigrams()

import nltk
bigrm = list(nltk.bigrams(line.split()))

您可以從構建line中的單詞列表開始

words = line.split()

然后你可以制作一個列表列表,其中包含帶有切片的結果對

pairs = [words[i:i + 2] for i in range(len(words))]

最后,你可以把每一對和' '連接起來

result = [" ".join(pair) for pair in pairs if len(pair) > 1]

你可以嘗試類似的東西,我不知道 python 中的語法,所以用 java 回答。 也許你可以把它轉換成python

String line = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
    String[] split = line.split(" ");
    String [] line_two = new String[split.length-1];

    for (int i = 1; i < split.length; i++) {
        line_two[i-1] =split[i-1] +" "+split[i];
    }

您可以使用帶有zip的惰性生成器:

def split_line(in_line):
    line_sp = line.split()
    yield from map(' '.join, zip(line_sp, line_sp[1:]))

print(list(split_line(line)))

['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,',
 ...
 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.']

你也可以用正則表達式試試:

rslt=[ " ".join(tup) for tup in re.findall(r"(\w+)\W+(?=(\w+))",line) ]

\\w+ 一個或多個單詞字符;

(\\w+) 我們捕獲匹配的模式;

\\W+ 一個或多個非單詞字符;

(?=(\\w+)) 向前看為 (?=...),但不要向前邁進,但要捕捉下一個單詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM