0

3,000 万件の投稿と、600 のブランドを表す 600 のクエリがあります。
たとえば、クエリ"Harry Potter" OR "Harry"はブランド Harry Potter を表し、
投稿は次のようになります。

Yesterday I went to see harry potter. The movie was great!

投稿テキストを表すクラスがあり、投稿テキスト内の用語 ( 、 )Postを検索する操作を処理する関数も含まれています。 別のクラスは、クエリを表し、 と通信します。 10 万件以上の投稿をコードで実行したところ、30 分かかりました。"Harry""Harry Potter"
QueryPost

class Post:

    def __init__(self, post):
        self._postString = post
        self._postString = re.sub(r'\s{2,}', ' ', self._postString)
        self._parsedSen = self._postString.split(' ')
        self._length = len(self._parsedSen)


    def isTermAppear(self, term):
        k = None
        termArr = term.split(' ')
        for i in range(self._length):
            if i + len(termArr) <= len(self._parsedSen):
                k = i
                flag = True
                for j in range(len(termArr)):
                    if not self._parsedSen[k].lower().find(termArr[j].lower()) >= 0:
                        flag = False
                    k += 1
                if flag:
                    return True
        return False

次に、関数を自明なものに変更し、コードを再度実行しました。今回は3分かかりました。

def isTermAppear(self, term):
    return False

どうすれPostばより効率的になりますか?

4

1 に答える 1

1

ターゲット単語の小文字を格納してself._parsedSen使用しtermArr = term.lower().split(' ')、次に使用します。

def isTermAppear(self, term):
    termArr = term.lower().split(' ')
    flag = True
    for t in termArr:
        flag &= t in self._parsedSen
    return flag

あなたは驚かれることでしょう。

于 2013-09-28T16:46:01.593 に答える