Segmentation Fault오류

김덕준@Google의 이미지

python으로 행렬을 numpy.linalg.solve()를 사용할경우 이부분에서 Segmentation Fault오류가 발생합니다 원래 window에서는 실행되는데 우분투에서 실행시 이러한 문제가 발생합니다

(gdb) r
[New Thread 0x7ffff1945700 (LWP 15240)]
[New Thread 0x7fffef144700 (LWP 15241)]
[New Thread 0x7fffec943700 (LWP 15242)]
[New Thread 0x7fffea142700 (LWP 15243)]
[New Thread 0x7fffe7941700 (LWP 15244)]
[New Thread 0x7fffe7140700 (LWP 15245)]
[New Thread 0x7fffe293f700 (LWP 15246)]
[New Thread 0x7fffe013e700 (LWP 15247)]
[New Thread 0x7fffdd93d700 (LWP 15248)]
[New Thread 0x7fffdb13c700 (LWP 15249)]
[New Thread 0x7fffd893b700 (LWP 15250)]
Thread 1 "python" received signal SIGSEGV, Segmentation fault.
0x00007fffac158520 in ?? ()

(gdb) bt
#0 0x00007fffac158520 in ?? ()
#1 0x0000000000000206 in ?? ()
#2 0x00007fffac158280 in ?? ()
#3 0x00007fffc8a25b90 in ?? ()
from /usr/local/java/jdk-10.0.1/lib/server/libjvm.so
#4 0x00007fffffffbe90 in ?? ()
#5 0x00007fffc83d75cb in VM_Version::get_processor_features() ()
from /usr/local/java/jdk-10.0.1/lib/server/libjvm.so
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

행렬이 작은 경우에는 오류가 나지 않습니다.
어떠한 오류이고 해결 방법 좀 가르쳐주세요 ㅠㅠ

File attachments: 
첨부파일 크기
Image icon window 실행 화면11.76 KB
Image icon 우분투 실행 화면11.86 KB
세벌의 이미지

에러 메시지만 있고 소스 코드는 없나요?

김덕준@Google의 이미지

# -*- coding: utf-8 -*-
from konlpy.tag import Kkma
from konlpy.tag import Twitter
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.preprocessing import normalize
import numpy as np
from scipy import sparse
 
 
class SentenceTokenizer(object):
 
    def __init__(self):
        self.kkma = Kkma()
        self.twitter = Twitter()
        self.stopwords = ['조선','중인' ,'만큼', '마찬가지', '꼬집었', "연합뉴스", "데일리", "동아일보", "중앙일보", "조선일보", "기자","아", "휴", "아이구", "아이쿠", "아이고", "어", "나", "우리", "저희", "따라", "의해", "을", "를", "에", "의", "가",]
 
 
    def url2sentences(self ):
        test = '신용카드 사용액이 소득공제를 받을 수 있는 요건에 못 미치니까 아예 사용액을 신고하지 않았던 겁니다. 김상조 공정거래위원장 후보자가 인사검증 과정에서 신용카드 사용액을 밝히지 않은 이유를 이렇게 설명했다. 김 후보자는 카드 사용액이 총소득의 4분의 1을 넘어야 하는 소득공제 요건을 충족하지 못한 것이다. 월급쟁이라면 응당 카드 소득공제를 받는 것으로 생각하지만 김 후보자처럼 공제를 포기하거나 받지 못하는 사람들도 적지 않다. 게다가 고소득자를 중심으로 올해부터 카드 소득공제 혜택을 줄일 예정이라 카드 공제받기가 더 까다로워진다. 11일 국세통계연보에 따르면, 2015년 기준으로 1733만명인 근로소득자 중에서 카드 소득공제를 받은 사람은 49.4%인 856만명으로 절반에 못 미쳤다. 그중 소득세가 면세(免稅)돼 세금을 내지 않은 257만명을 제외하고 실제로 세금을 낸 사람 중에서 카드 소득공제를 받은 사람은 599만명으로 전체 월급쟁이의 34.5%였다. ◇연봉 5000만원대가 84%로 카드 공제 가장 많이 받아 신용카드 소득공제를 받으려면 총소득의 4분의 1 이상을 카드로 써야 한다. 4분의 1 문턱에서 1원이라도 모자라면 한 푼도 공제받을 수 없다. 수억원대의 고소득자일수록 카드로 소득의 4분의 1 이상을 쓰기 쉽지 않기 때문에 소득이 높을수록 공제를 못 받는 경우가 늘어난다. 2015년 기준으로 근로소득세를 내는 사람 중에서 카드 소득공제를 받는 비율이 가장 많은 소득 구간은 연봉 5000만~6000만원이었다. 전체의 84%가 혜택을 봤다. 연봉 6000만~8000만원 사이에서도 83%, 8000만~1억원 구간은 79%가 공제를 받았다. 반면 1억~2억원 사이에서는 공제받은 사람 비율이 68%로 줄었고, 2억~3억원인 사람은 31%만 카드 공제를 받은 것으로 나타났다. 국세청 관계자는 “월급쟁이가 카드를 쓰는 용도가 다들 엇비슷해서 고소득자라고 해서 카드 사용액이 월등하게 늘어나지는 않기 때문에 소득이 높을수록 ‘4분의 1 문턱’을 넘기가 어려워지는 경향이 있다”고 말했다. 또 고소득자들이 외국에 나가 카드를 많이 사용하지만, 해외에서의 카드 사용액을 일절 공제해주지 않는 점도 영향이 있는 것으로 분석된다. ◇소득 낮은 부부는 한 사람 명의의 카드 써야 유리 소득이 연 5000만원에 못 미치는 서민층에서도 카드 공제를 받는 사람들의 비율이 낮아지는 경향을 보인다. 연봉 4000만원대는 81%, 3000만원대는 73%, 2000만원대는 55%만 카드 소득공제를 받은 것으로 나타났다. 이런 현상이 나타나는 이유는 우선 저소득층일수록 허리띠를 졸라매는 경향이 있어 ‘4분의 1 문턱’을 넘지 못하는 경우가 상당하기 때문인 것으로 추정된다. 또 소득이 넉넉하지 않은 맞벌이의 경우 한 사람 명의로 카드를 발급받아 한 사람의 카드 사용액이 ‘4분의 1 문턱’을 넘도록 몰아주고, 나머지 배우자는 카드 소득공제를 포기하는 절세 노하우를 보여주는 사례도 많다고 국세청 관계자들은 설명했다. 서울지역의 한 세무사는 “부부가 각자 명의로 카드를 쓰다가 둘 다 ‘4분의 1 문턱’을 못 넘겨 안 내도 될 세금을 더 내는 경우가 있으니 주의해야 한다”고 말했다. 2015년 기준으로 카드 소득공제를 받은 599만명은 평균 245만원을 공제받은 것으로 나타났다. 300만원인 공제한도를 채우지 못한 사람들이 적지 않다는 뜻이다. 카드 소득공제는 4분의 1 문턱을 초과하는 액수에 대해 신용카드는 15%, 체크카드는 30%에 해당하는 액수를 300만원 한도로 공제하는 방식이다. 전통시장에서 결제한 금액과 대중교통비에 대해서는 각각 100만원씩 공제 한도가 더 늘어난다. ◇연봉 1억2000만원 이상은 올해부터, 7000만원 이상은 내년부터 공제한도 축소 신용카드 소득공제는 올해부터 순차적으로 한도가 줄어들게 되므로 관련 제도 변화를 유심히 살펴볼 필요가 있다. 고소득자의 공제 폭을 줄여 실질적인 근로소득세 증세(增稅)가 예고돼 있다. 우선 연소득 1억2000만원이 넘는 월급쟁이는 올해 사용분부터 공제한도가 기존 300만원에서 200만원으로 줄어든다. 내년 초 연말정산 때 돌려받는 세금이 수십만원 정도 줄어들거나, 토해내는 세금이 수십만원 늘어난다는 뜻이다. 연봉 7000만~1억2000만원 근로자의 공제 한도는 내년 사용분부터 300만원에서 250만원으로 축소될 전망이다. 연봉 7000만~1억2000만원인 근로자에 대해 정부는 2019년부터 한도를 축소하기로 했지만 지난해 국회가 1년 앞당겨 실시하기로 결정했다.'        
        sentences = self.kkma.sentences(test)       
        for idx in range(0, len(sentences)):
            if len(sentences[idx]) <= 10:
                sentences[idx-1] += (' ' + sentences[idx])
                sentences[idx] = ''       
        return sentences    
 
    def get_nouns(self, sentences): 
        nouns = []
        for sentence in sentences:
            if sentence is not '':
                nouns.append(' '.join([noun for noun in self.twitter.nouns(str(sentence))if noun not in self.stopwords and len(noun) > 1]))       
        return nouns
 
class GraphMatrix(object):
 
    def __init__(self):        
        self.tfidf = TfidfVectorizer()
        self.cnt_vec = CountVectorizer()
        self.graph_sentence = []
 
    def build_sent_graph(self, sentence):        
        tfidf_mat = self.tfidf.fit_transform(sentence).toarray()        
        self.graph_sentence = np.dot(tfidf_mat, tfidf_mat.T)        
        return self.graph_sentence
 
    def build_words_graph(self, sentence):         
        cnt_vec_mat = normalize(self.cnt_vec.fit_transform(sentence).toarray().astype(float), axis=0)
        vocab = self.cnt_vec.vocabulary_
        return np.dot(cnt_vec_mat.T, cnt_vec_mat), {vocab[word] : word for word in vocab}
 
class Rank(object):
    def get_ranks(self, graph, d=0.85):         
        A = graph
        matrix_size = A.shape[0]      
        for id in range(matrix_size):
            A[id, id] = 0 
            link_sum = np.sum(A[:,id])            
            if link_sum != 0:
                    A[:, id] /= link_sum
            A[:, id] *= -d
            A[id, id] = 1
        B = (1-d) * np.ones((matrix_size, 1))       
        print('ranks')
        ranks = np.linalg.solve(A, B) # 연립방정식 Ax = b
        print('stop')
        return {idx: r[0] for idx, r in enumerate(ranks)}
 
 
class TextRank(object):
 
    def __init__(self):        
        self.sent_tokenize = SentenceTokenizer()         
        self.sentences = self.sent_tokenize.url2sentences()       
        self.nouns = self.sent_tokenize.get_nouns(self.sentences)
        self.graph_matrix = GraphMatrix()       
        self.sent_graph = self.graph_matrix.build_sent_graph(self.nouns)     
        self.words_graph, self.idx2word = self.graph_matrix.build_words_graph(self.nouns)    
        self.rank = Rank()        
        self.sent_rank_idx = self.rank.get_ranks(self.sent_graph)        
        self.sorted_sent_rank_idx = sorted(self.sent_rank_idx, key=lambda k: self.sent_rank_idx[k], reverse=True) # 믄장 정렬
 
    def summarize(self, sent_num=3):            
        summary = []
        index=[]    
        for idx in self.sorted_sent_rank_idx[:sent_num]:
            index.append(idx)
        index.sort()    
        for idx in index:
            summary.append(self.sentences[idx])
        return summary
 
    def keywords(self, word_num=10):    
        rank = Rank()
        rank_idx = rank.get_ranks(self.words_graph)    
        sorted_rank_idx = sorted(rank_idx, key=lambda k: rank_idx[k], reverse=True)
        keywords = []
        index=[]
 
        for idx in sorted_rank_idx[:word_num]:
            index.append(idx)
 
        for idx in index:
            keywords.append(self.idx2word[idx])
        return keywords
 
 
print('textrank')
textrank = TextRank()
print('textrank.summarize')
for row in textrank.summarize(3):
    print(row)
    print()
print('---------------------------------')
print('keywords :',textrank.keywords())

여기 ranks 부분까지 출력하고 멈추는거 같습니다

세벌의 이미지

파이썬 코드는 들여쓰기가 중요하죠.
kldp에서 소스 코드 넣는 방법 아래 글 참고하셔요.
https://kldp.org/node/158191

김덕준@Google의 이미지

네 수정했습니다

jick의 이미지

Python이 죽어서 스택을 뜨는데 libjvm.so가 나온다니 뭔가 대단히 특이한 상황이로군요.

가능하다면 일단 Python을 별도의 프로세스에서 돌리는 게 어떨까요?

김덕준@Google의 이미지

넵 알겠습니다 ㅠㅠ

지나가다2의 이미지

혹시 이문제 해결되었나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.