0

私は次のPythonコードを持っています:

import regex
original = " the  quick ' brown 1 fox! jumps-over the 'lazy' doG? !  "
s = [i for i in original.split(" ")]

get_sentence内の要素を取り、sその要素が属する文字列として文を返すという関数を書きたいと思います。例えば:

"brown" ->  "the  quick ' brown 1 fox!"

最初の「the」が関数に渡された場合、次のようになります。

"the" -> the  quick ' brown 1 fox!"

2番目の場合:

"the" -> "jumps-over the 'lazy' doG?"

そのような関数の引数として何を渡しますか?C ++では、std :: vector::const_iteratorを渡す場合があります。CIでは、int(配列インデックス)またはおそらくポインターを渡します。

4

4 に答える 4

2
>>> from itertools import product, chain
>>> #Assuming your original sentence is
>>> origional = " the  quick ' brown 1 fox! jumps-over the 'lazy' doG? !  "
>>> #Sentence terminators are
>>> sent_term = "[?!.;]"
>>> #I will use regex to split it into sentences
>>> re.split(sent_term, origional.strip())
["the  quick ' brown 1 fox", " jumps-over the 'lazy' doG", ' ', '']
>>> #And then split it as words
>>> #I could have used str.split, but that would include punctuations
>>> #Which you may not be interested
>>> #For each of the words, I create a mapping with the sentence using product
>>> word_map = ((product(re.split("\W",e),[e])) 
                 for e in re.split(sent_term, origional.strip()))
>>> #Chain it as a single list
>>> word_map = chain(*((product(re.split("\W",e),[e])) 
                        for e in re.split(sent_term, origional.strip())))
>>> from collections import defaultdict
>>> #Create a default dict
>>> words = defaultdict(list)
>>> #And populated all non trivial words
>>> for k, v in word_map:
    if k.strip():
        words[k]+=[v]


>>> words
defaultdict(<type 'list'>, {'brown': ["the  quick ' brown 1 fox"], 'lazy': [" jumps-over the 'lazy' doG"], 'jumps': [" jumps-over the 'lazy' doG"], 'fox': ["the  quick ' brown 1 fox"], 'doG': [" jumps-over the 'lazy' doG"], '1': ["the  quick ' brown 1 fox"], 'quick': ["the  quick ' brown 1 fox"], 'the': ["the  quick ' brown 1 fox", " jumps-over the 'lazy' doG"], 'over': [" jumps-over the 'lazy' doG"]})
>>> #Now to get the first word
>>> words['the'][0]
"the  quick ' brown 1 fox"
>>> #Now to get the second sentence
>>> words['the'][1]
" jumps-over the 'lazy' doG"
于 2013-01-30T16:41:12.043 に答える
0

あなたが何をしようとしているのか完全にはわかりませんが、おそらく整数インデックスを渡すだけでしょう。the2 つがまったく同じであるため、への参照を渡すことはできません。

于 2013-01-30T16:19:16.520 に答える
0

「Pythonic」の方法は、キーが単語で値が文である辞書、またはキーが属する文のリストを作成することです。

lookup = {}
sentences = split_to_sentences(large_text)
for idx_sentence, sentence in enumerate(sentences):
    for word in split_to_words(sentence):
        if word in sentence:
            s = lookup.setdefault(word, set())
            s.add(idx_sentence)

lookupこれで、各単語にその単語が出現する文のインデックスが割り当てられた辞書ができました。ところで、非常に優れたリスト内包表記でそれを書き直すことができます。

于 2013-01-30T16:22:44.607 に答える
0

文のリストへの辞書インデックスを使用してこれを行うことができます。

import re
original = " the  quick ' brown 1 fox! jumps-over the 'lazy' doG? !  "

index={}

for sentence in re.findall(r'(\b.*?[.!?])',original):
    for word in re.findall(r'\w+',sentence):
        index.setdefault(word,[]).append(sentence)

print index

プリント:

{'brown': ["the  quick ' brown 1 fox!"], 'lazy': ["jumps-over the 'lazy' doG?"], 'jumps': ["jumps-over the 'lazy' doG?"], 'fox': ["the  quick ' brown 1 fox!"], 'doG': ["jumps-over the 'lazy' doG?"], '1': ["the  quick ' brown 1 fox!"], 'quick': ["the  quick ' brown 1 fox!"], 'the': ["the  quick ' brown 1 fox!", "jumps-over the 'lazy' doG?"], 'over': ["jumps-over the 'lazy' doG?"]}

最初の 'the' は で表されindex['the'][0]、2 番目は で表されますindex['the'][1]

于 2013-01-30T16:51:22.467 に答える