[학회 발표] 토픽 모델링과 오피니언 마이닝을 활용한 영화 리뷰 유용성 측정

📚 학회 개요

  • 제46회 ISMS Marketing Science Conference 2024
  • 기간 : 2024년 6월 27일 ~ 29일
  • 장소 : ICC(International Convention Centre), Sydney

 

📚 프로젝트 개요

  • 진행 기간 : 23.10 ~ 24.06
  • 팀 구성 : 2명
  • 분석 목적 : 

1. 서론

 

영화 마케팅 전략은 전통적인 미디어 광고에서 디지털 데이터 분석과 실시간 소비자 행동 예측으로 전환되고 있다. 소비자들은 영화를 보기 전 품질을 평가하기 어렵기 때문에, 불확실성을 줄이기 위해 리뷰에 의존한다. 

  • 리뷰 유용성이 중요한 이유 : 소비자 신뢰 향상, 마케팅 전략 개선, 구매 의사결정 지원, 리뷰 시스템 고도화

리뷰 유용성은 길이(length), 감성(sentiment), 적시성(timeliness), 평점(rating) 분산 등에 의해 크게 영향을 받는 것으로 알려져 있습니다.

 

 

2. 선행 연구

2-1. 리뷰 유용성(Review Helpfulness)

 

리뷰 유용성은 단순히 리뷰가 많다는 것과는 달리, 소비자가 실제로 도움이 된다고 판단한 리뷰가 얼마나 되는지를 의미한다. 

리뷰 유용성 분석은 분석가과 기업 모두에게 다양한 이점을 제공한다. 

  • 소비자 신뢰 향상 — 검증된 리뷰는 브랜드 신뢰도를 상승시킴
  • 마케팅 전략 개선 — 소비자 반응 패턴을 마케팅에 반영
  • 제품 개발 및 개선 — 리뷰에서 실질적인 개선 방향을 도출 가능
  • 리뷰 시스템 고도화 — 플랫폼 내 리뷰 품질 관리 가능
  • 경제적 효과 — 유용한 리뷰는 구매 전환율 향상으로 연결

어떤 리뷰가 유용한지를 파악하면 단순한 텍스트 분석을 넘어, 소비자 행동 반영 → 리뷰 품질 평가 → 구매 결정에 미치는 영향 분석까지 이어지는 가치 사슬을 이해할 수 있다. 특히, 유용성 투표(helpful vote)를 많이 받은 리뷰일수록 소비자에게 더 신뢰할 수 있는 정보를 제공하며, 구매 전 리뷰 품질을 사전에 판단하고 더 나은 선택을 할 수 있도록 도울 수 있다. 이러한 이유로 본 연구에서는 IMDb의 Up Vote 수를 리뷰 유용성의 측정 지표로 설정했다. 

 

 

3. 데이터 수집

 

IMDb(https://www.imdb.com/)는 영화, TV 시리즈, 배우와 제작진 등 다양한 콘텐츠를 데이터베이스화하여 제공하며, 사용자가 직접 리뷰를 작성하고 평점을 매길 수 있는 세계 최대의 영화 플랫폼이다. 많은 선행 연구에서 IMDb 리뷰 데이터를 활용했고, 다양한 장르와 연도에 걸친 대규모 리뷰 데이터를 수집할 수 있어 연구에 IMDb를 활용하게 되었다. 

 

2013년~2023년 개봉 영화 중 장르별 상위 5개 영화를 선정해 총 85,218개의 데이터를 수집했다. 

 

base_url = "http://www.imdb.com/"
key = ""

url = '수집하고 싶은 영화의 user reviews 페이지 url 붙여넣기'
cnt = 0
MAX_CNT = 10000

f = xlwt.Workbook()
sheet1 = f.add_sheet('Movie Reviews', cell_overwrite_ok=True)
row = ["Title", "Author", "Date", "Up Vote", "Total Vote", "Rating", "Review", "Spoiler"]
for i in range(0, len(row)):
  sheet1.write(0, i, row[i])

print("url = ", url)
res = requests.get(url)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, "lxml")


for item in soup.select(".lister-list"):
    title = item.select(".title")[0].text
    author = item.select(".display-name-link")[0].text
    date = item.select(".review-date")[0].text
    votetext = item.select(".text-muted")[0].text
    upvote = re.findall(r"\b\d{1,3}(?:,\d{3})*(?:\.\d+)?\b", votetext)[0]
    totalvote = re.findall(r"\b\d{1,3}(?:,\d{3})*(?:\.\d+)?\b", votetext)[1]
    rating = item.select("span.rating-other-user-rating > span")
    if len(rating) == 2:
        rating = rating[0].text
    else:
        rating = ""
    review = item.select(".content")[0].text
    spoiler_elements = item.select(".spoiler-warning")
    if spoiler_elements:
        spoiler = spoiler_elements[0].text
    else:
        spoiler = " "
    row = [title, author, date, upvote, totalvote, rating, review, spoiler]
    for i in range(0, len(row)):
        sheet1.write(cnt, i, row[i])
    cnt = cnt + 1

load_more = soup.select(".load-more-data")
flag = True
if len(load_more):
    ajaxurl = load_more[0]['data-ajaxurl']
    base_url = base_url + ajaxurl + "?ref_=undefined&paginationKey="
    key = load_more[0]['data-key']
else:
    flag = False

while flag:
    url = base_url + key
    print("url = ", url)
    res = requests.get(url)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text, "lxml")
    for item in soup.select(".lister-item-content"):
        title = item.select(".title")[0].text
        author = item.select(".display-name-link")[0].text
        date = item.select(".review-date")[0].text
        votetext = item.select(".text-muted")[0].text
        vote = re.findall(r"\b\d{1,3}(?:,\d{3})*(?:\.\d+)?\b", votetext)[0]
        totalvote = re.findall(r"\b\d{1,3}(?:,\d{3})*(?:\.\d+)?\b", votetext)[1]
        rating = item.select("span.rating-other-user-rating > span")
        if len(rating) == 2:
            rating = rating[0].text
        else:
            rating = ""
        review = item.select(".text")[0].text
        spoiler_elements = item.select(".spoiler-warning")
        if spoiler_elements:
            spoiler = spoiler_elements[0].text
        else:
            spoiler = " "
        row = [title, author, date, vote, totalvote, rating, review, spoiler]
        for i in range(0, len(row)):
            sheet1.write(cnt, i, row[i])
        if cnt >= MAX_CNT:
            break
        cnt = cnt + 1
    if cnt >= MAX_CNT:
        break
    load_more = soup.select(".load-more-data")
    if len(load_more):
        key = load_more[0]['data-key']
    else:
        flag = False

f.save('Review.xls')
print(cnt, "reviews saved.")

 

영화 리뷰 데이터는 python 기반 웹 크롤링으로 수집했다. requests로 웹페이지를 불러오고, BeautifulSoup으로 HTML을 파싱하여 필요한 데이터를 추출하는 방식을 사용했다. 

  • Title, Author, Date, Up Vote, Total Vote, Rating, Review, Spoiler

리뷰 텍스트 외에도 리뷰 작성자의 정보를 별도로 수집했다. 유저 정보는 리뷰 유용성에 영향을 미치는 출처 신뢰성 변수를 구성하는데 활용 되었다. 

  • Name, Timestamp, Badges, Genres

 

 

4. 데이터 전처리

EMOJI_PATTERN = re.compile(
    "["
    u"\U0001F600-\U0001F64F"
    u"\U0001F300-\U0001F5FF"
    u"\U0001F680-\U0001F6FF"
    u"\U0001F1E0-\U0001F1FF"
    u"\U00010000-\U0010ffff"
    u"\u2600-\u2B55"
    "]+", flags=re.UNICODE
)

MULTI_SPACE = re.compile(r'\s+')
MULTI_PUNC = re.compile(r'[.!?]+')
NUM = re.compile(r'\d+')

PUNCT = string.punctuation + "‘’“”-"

def clean_text(text):
    text = str(text)
    text = MULTI_SPACE.sub(' ', text)
    text = text.replace('\n', '')
    text = MULTI_PUNC.sub('. ', text)
    text = re.sub(r"'ve", ' have', text)
    text = NUM.sub('', text)
    text = EMOJI_PATTERN.sub('', text)
    text = text.translate(str.maketrans('', '', PUNCT))
    return text.strip()

cells = []
body = []

for text in texts:
    cleaned = clean_text(text)
    body.append(cleaned)
    cells.append(cleaned.lower())
    
sr = pd.DataFrame(zip(cells), columns = ['Noname'])
print(len(sr))
print(sr.head(5))

텍스트 정규화(Text Normalization)

모든 알파벳을 소문자로 변환하고, 분석에 불필요한 HTML 태그, 특수문자, 숫자, 구두점 등을 제거한다.

 

tokenized = sr.apply(lambda row: nltk.word_tokenize(row['Noname']), axis=1)
tokenized = tokenized.apply(lambda x : [word for word in x if len(x) > 2])
print(tokenized.head(20))

tagged = tokenized.apply(lambda x: pos_tag(x))

#거르고 싶은 태그 리스트, 리스트에 있는 품사를 추출하고 싶으면 not in을 in으로 수정
tag = ['NNP','NNPS','PDT','POS','PRP','PRP$','RB','RBR','RBS','TO','WDT','WP','WP$','WRB',''] 

tagged = tagged.apply(lambda x: [(word,pos) for word,pos in x if pos not in tag])
print(tagged.head(5))

토큰화 (Tokenization)
NLTK의 word_tokenize를 사용해 정규화된 텍스트를 단어 단위로 분리했다. 이후 길이가 2 이하인 단어(단일 알파벳, 조사 등)는 제거해 분석에 의미 없는 토큰을 걸러냈다. 토큰화된 단어에 품사(Part-of-Speech) 태그를 부착해 각 단어가 명사인지, 동사인지, 부사인지 등을 구분한다. 이후 분석에 불필요한 품사는 필터링으로 제거한다. 

 

noun = ['NN','NNS','NNP','NNPS']
verb = ['VB','VBD','VBG', 'VBN', 'VBP', 'VBZ']

lemm = WordNetLemmatizer()
lemmed = tagged.apply(lambda x: [(lemm.lemmatize(word, pos='v'), pos) if pos in verb else (word,pos) for word, pos in x])
all_lemmed = lemmed.apply(lambda x: [lemm.lemmatize(word,pos='n') if pos in noun else word for word, pos in x])
print(all_lemmed.head(5))

어간 추출 & 표제어 추출 (Stemming & Lemmatization)

품사 정보를 활용해 단어를 원형을 변환한다. 어간 추출은 단어의 어미를 단순 절삭하는 거라면, 표제어 추출은 문법적 원형으로 변환하는 방식이기 떄문에 의미 보전에 더 유리하다. 동사와 명사 위주로 적용한다. 

 

불용어 제거

토큰화된 단어 중 분석에 의미 없는 단어들을 제거한다. "the", "is", "a", "and" 와 같이 문장 내에서 자주 등장하지만 실질적인 의미를 담고 있지 않은 단어들이 이에 해당한다. 불용어를 제거하지 않으면 이런 단어들이 높은 빈도로 등장해 토픽 모델링 결과를 왜곡할 수 있다. 

 

DTM 생성 (Document-Term Matrix)

전처리가 완료된 텍스트를 바탕으로 문서-단어 행렬(DTM)을 생성한다. DTM은 각 리뷰(문서)에서 각 단어가 몇 번 등장했는지를 수치로 나타낸 행렬로, LDA 토픽 모델링의 핵심 입력값으로 활용된다. 

 

 

5. LDA 토픽모델링

토픽모델링은 여러 문서들로 이루어진 텍스트 집합에서, 특정 문서에 자주 등장하는 단어들을 토픽으로 추출하는 확률적 알고리즘이다. 토픽을 구성하는 단어들을 통해서 문서에서 다루는 내용을 파악 가능하다. LDA(Latent Dirichlet Allocation) 토픽모델링은 대규모 텍스트 데이터에서 숨겨진 주제(토픽)을 자동으로 찾아내는 비지도 학습 기반의 토픽 모델링 기법이다. 각 문서는 여러 토픽의 혼합으로 구성되어 있고, 각 토픽은 특정 단어들의 분포로 표현된다고 가정한다. 

토픽모델링의 장점

  • 토픽모델링은 사전 지식에 크게 의존하지 않고, 귀납적으로 의미의 관계성을 찾아낼 수 있다는 장점이 있다.
  • 토픽모델링은 문서 군집화와는 달리, 하나의 문서가 여러 토픽에 동시 대응 가능하다는 점에서 방대한 양의 문서를 구분할 때보다 적합한 모델로 평가받는다.
  • 토픽모델링은 데이터 차원 축소에 용이하며, 매번 결과가 바뀌지 않고 일관성 있는 토픽을 추출한다는 장점이 있다. 

 

최적의 토픽 수(K)를 설정하기 위해 Coherence와 Perplexity 지표를 활용했다. Coherence는 같은 토픽 내 단어들이 얼마나 의미적으로 연관되는지를 측정하며, 높을수록 좋다. Perplexity는 모델이 새로운 문서를 얼마나 잘 예측하는지를 측정하며 낮을수록 좋다. K를 2부터 단계적으로 높여가며 두 지표를 함께 평가한 결과, K=10일 때 Coherence Score가 가장 높고 Perplexity가 안정적으로 수렴하는 것을 확인하여 최종 토픽 수를 10개로 결정했다. 

 

 

① 감성 토픽 (1, 3, 4, 5, 9)
관객이 영화를 보고 느낀 감정과 평가를 담은 토픽으로, 긍정·부정의 스펙트럼이 다양하게 존재한다. 단순한 감탄(토픽 1, 5, 9)부터 구체적인 비판(토픽 3, 4)까지 세분화된다.

 

② 장르 토픽 (2, 6, 7, 8)
특정 장르에 집중된 리뷰들이 별도의 토픽으로 묶였다. 이는 장르마다 관객이 주목하는 요소가 다르다는 것을 시사하며, 장르 맞춤형 마케팅 전략의 필요성을 뒷받침한다.

 

③ 서사 토픽 (10)
원작 각색이나 시리즈물에 대한 비교·평가가 독립적인 토픽을 형성했다. 프리퀄, 속편 등 IP 기반 영화에 대한 관객의 관심이 높음을 알 수 있다.

 

이 중 Positive Criticism(1), History & Biography(6), Horror(7), Story & Adaptation(10) 4개 토픽은 리뷰 유용성에 유의미한 영향을 미치는 변수로 선정되어 이후 회귀분석에 사용되었다.

 

 

6. 상관분석

① Timeliness(-0.427)
가장 강한 음의 상관. 리뷰 작성 시점이 개봉일로부터 멀수록(오래된 리뷰일수록) 유용하다고 평가받는 경향이 낮아진다. 

 

② Rating(-0.255)
평점이 높을수록 유용성이 낮아지는 경향. 극단적으로 높은 평점의 리뷰는 감정적 표현에 치우쳐 정보량이 적을 수 있다.

 

③ Experience(+0.089)
리뷰어의 IMDb 활동 경력이 길수록 유용한 리뷰를 작성하는 경향. 경험 많은 리뷰어일수록 정보의 질이 높다.

 

 

7. 회귀분석

회귀분석은 여러 독립변수가 종속변수에 미치는 영향의 방향과 크기를 동시에 추정하는 분석이다. 리뷰 유용성(Log_Helpfulness)을 종속변수로, 총 14개의 변수를 독립변수로 설정해 전체 모델 1개와 장르별 모델 9개, 총 10개의 회귀모델을 구축했다. 

 

 

8. 오피니언마이닝

오피니언 마이닝은 텍스트 데이터에서 사람들의 의견, 감정, 태도를 자동으로 추출하고 분석하는 기법이다. 단순히 긍정/부정을 분류하는 것을 넘어, 특정 대상의 어떤 측면에 대해 어떤 감정을 갖는지까지 파악할 수 있다. 

오피니언 마이닝은 분석 단위에 따라 세 가지 방식으로 구분되는데, 본 연구에서는 이 중 가장 정교한 Aspect-Based(측면 기반) 방식을 채택했다. 문장을 구성하는 각 단어(특성, Feature)를 추출하고, 해당 특성에 대한 감성 방향을 개별적으로 분석하는 방식이다. 영화 리뷰의 특성상 한 리뷰 안에 여러 요소에 대한 평가가 혼재되어있는데, 문서 전체나 문장 단위로만 감성을 분석하면 중요한 정보가 뭉개질 수 있다. Aspect-Based 방식은 이러한 복합적인 감성을 특성별로 분리해 정확하게 포착할 수 있어 본 연구의 목적에 가장 부합했다. 

 

특징 추출(Feature Extraction)

TF-IDF(Term Frequency-Inverse Document Frequency)을 통해 데이터 전체에서 중요 단어를 추출했다. TF-IDF는 단순 빈도가 높은 단어가 아니라, 특정 문서에서는 자주 등장하지만 흔하지 않은 단어에 가중치를 높게 부여하는 방식이다. 이를 통해 리뷰 데이터에서 실질적으로 의미 있는 핵심 단어를 선별할 수 있었다. 

  • 8개 특징 : movie, story, actor, character, director, music, scene, effect

 

동의어 사전 기반 초기 분류(Initial Classification with Synonym Dictionary)

각 특성에 대한 동의어 사전을 직접 구축하여, 리뷰에 해당 단어 또는 동의어가 등장하면 해당 특성으로 분류했다. 

 

BERT 모델 기반 자동 레이블링

동의어 사전으로 분류되지 않은 리뷰에 대해서는 BERT(Bidirectional Encoder Representations from Transformers) 모델을 활용해 추가 분류를 수행했다.

BERT는 문장 내 단어의 의미를 앞뒤 문맥을 양방향으로 동시에 고려하여 파악하는 언어 모델이다. 예를 들어 "The performance was breathtaking"이라는 문장에서 "performance"가 actor 특성에 해당한다는 것을 문맥을 통해 자동으로 판단한다. 동의어 사전에 없는 표현도 문맥을 고려해 정확하게 분류가 가능하다. 

 

미분류 리뷰 수동 보정(Manual Adjustment of Unlabeled Reviews)

BERT 과정에서도 분류되지 않거나 잘못 분류된 리뷰는 직접 수동으로 검토하고 보정했다. 위 예시처럼 감정 표현 위주의 리뷰나 특정 특성을 직접 언급하지 않는 리뷰는 직접 문맥을 판단하여 레이블을 부여했다. 

 

감성분석(Sentiment Analysis)

각 리뷰를 문장 단위로 분리한 뒤, 문장별로 감성 점수를 도출했다. 감성 분석에는 AFINN 감성 사전을 활용했다. AFINN은 영어 단어에 -5부터 +5 사이의 점수를 부여한 사전으로 감정적 강도까지 수치로 표현할 수 있다. 

위 예시는 'John Wick'의 리뷰이다. 각 문장별 감성 점수가 도출되면 평균내어 리뷰 감성 점수로 정리했다. 

 

특징 - 감정 매트릭스(Feature-Sentiment Matrix)

문장별 감성 분석을 실행한 후, 앞서 라벨링했던 특성 정보와 결합해 매트릭스를 구성했다. 이 행렬을 통해서 관객이 어떤 요소를 가장 긍정적/부정적으로 평가하는지, 장르마다 어떤 요소가 호평/혹평을 받는지, 어떤 특성에 대한 언급이 리뷰 유용성과 연결되는지 알 수 있었다. 

 

 

9. 결론

① 영화 리뷰에는 10가지 뚜렷한 토픽이 존재한다

LDA 모델을 통해 감성 기반 토픽(긍정적 평가, 부정적 평가, 극찬 등), 장르 기반 토픽(애니메이션, 공포, SF 등), 서사 기반 토픽(각색·시리즈물)의 세 가지 성격으로 구분되는 10개 토픽을 도출했다. 이는 관객의 리뷰가 단순한 감정 표현을 넘어 다양한 관점과 맥락을 담고 있음을 보여준다.

 

② 토픽과 리뷰어 특성이 유용성에 유의미한 영향을 미친다

회귀분석 결과, 리뷰의 토픽 구성과 리뷰어의 활동 경력·배지 등 신뢰도 지표가 리뷰 유용성에 통계적으로 유의미한 영향을 미치는 것으로 나타났다. 특히 적시성(Timeliness)과 평점(Rating)은 전 장르에 걸쳐 일관되게 유용성에 부정적 영향을 미쳤다.

 

③ 오피니언 마이닝은 전통적 설문 대비 효율적인 대안이다

대규모 텍스트 데이터에서 특성별 감성을 자동으로 추출하는 오피니언 마이닝은, 시간과 비용이 많이 드는 전통적 설문 조사를 대체할 수 있는 효율적인 분석 방법임을 확인했다.

 

 

📍 한계

① 은유적 표현이나 감탄사 위주의 리뷰는 특징 키워드를 정확히 포착하기 어려워 정확도가 낮아질 수 있다. 

② 수동 라벨링 : 감성 사전에 등재되지 않은 단어는 감성 점수 부여가 불가능했기에 수동 라벨링을 할 수 밖에 없었다. 수동 라베링은 전문적이지 않기 때문에 오류가 많을 것으로 예상된다. 

 

📍 후기

처음에는 학회 발표나 논문을 전혀 염두에 두지 않았었다. 데이터 분석에 대해 알아가고 싶다는 마음으로 시작한 프로젝트였기에, 초반 스토리라인 구성은 다소 부실했다. 원래는 리뷰 유용성과 영화 수익성 간의 관계를 분석하고 싶었지만, 수익 데이터를 확보하기 어려워 지금의 형태로 방향을 바꾸게 되었다... 분석 과정에서도 토픽 모델링까지는 무난하게 진행했지만, 이후 BERT를 활용한 오피니언 마이닝 구현은 역량의 한계를 느꼈다. 파이썬 기초가 전혀 없는 상태에서 GPT에 99% 의존하며 코딩했는데(...) 당시 상황에서는 최선을 다했다고 생각한다. 그렇게 완성한 프로젝트가 운 좋게 첫 학회 투고에서 채택되었고, 더욱 놀랍게도 그 첫 학회가 시드니에서 열리는 해외 학회였다. 막상 학회에 참석해 다른 연구자들의 발표를 들으니 부족함이 더 크게 느껴졌다. 이 자리에 오게 된 것은 실력보다는 운이 따라준 덕분이라는 생각이 들어서 많이 반성했다.

하지만 그 경험이 오히려 동기부여가 되었다. 학회 이후로 경영대에 개설된 데이터 분석 관련 수업을 모두 찾아 들으며 하드 스킬을 쌓기 시작했다. 공모전도 경험해 본 지금 다시 발표 내용을 정리해보니, 다음에 이런 장기 프로젝트에 참여하게 된다면 분명 지금보다 더 잘할 수 있을 것이라는 생각이 든다. 

 

📍 Reference 

  • Abd. Samad Hasan Basari, Burairah Hussin, I. Gede Pramudya Ananta, Junta Zeniarja, Opinion Mining of Movie Review using Hybrid Method of Support Vector Machine and Particle Swarm Optimization, Procedia Engineering, Volume 53, 2013, Pages 453-462
  • Yılmaz, M. K., Altunay, H. T., et al., "Marketing insight from consumer reviews: Creating brand position through opinion mining approach," Telematics and Informatics Reports, Volume 11, 2023
  • Abd. Samad Hasan Basari, Burairah Hussin, I. Gede Pramudya Ananta, Junta Zeniarja, Opinion Mining of Movie Review using Hybrid Method of Support Vector Machine and Particle Swarm Optimization, Procedia Engineering, Volume 53, 2013, Pages 453-462
  • Yılmaz, M. K., Altunay, H. T., et al., "Marketing insight from consumer reviews: Creating brand position through opinion mining approach," Telematics and Informatics Reports, Volume 11, 2023
  • A.J.T. Lee, F.C. Yang, C.H. Chen, C.S. Wang, C.Y. Sun, Mining perceptual maps from consumer reviews, Decis Support Syst, 82 (2015), pp. 12-25
  • A.S.A. Daabes, F.F. Kharbat, Customer-based perceptual map as a marketing intelligence source, International Journal of Economics and Business Research, 13 (4) (2017), pp. 360-379
  • A.S.A. Daabes, F.F. Kharbat, Customer-based perceptual map as a marketing intelligence source, International Journal of Economics and Business Research, 13 (4) (2017), pp. 360-379
  • M. Hu, B. Liu, Mining and Summarizing Customer Reviews, the 10th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, August, New York, USA (2004)
  • V.M. Pradhan, J. Vala, P. Balani, A survey on sentiment analysis algorithms for opinion mining, Int. J. Comput. Appl., 133 (9) (2016), pp. 7-11
  • K. Dave, S. Lawrence, D. Pennock, Mining the peanut gallery: opinion extraction and semantic classification of product reviews, the 12th International Conference on World Wide Web, May (2003)
  • A. Ekhlassi, F. Reshadi, A. Wan, Brand perceptual mapping by text mining online product reviews, International Journal of Marketing and Business Communication, 5 (3) (2016), pp. 26-36
  • J.P. Peter, J.C. Olson, Consumer Behaviour and Marketing Strategy, Irwin McGraw-Hill, Boston (1999)