본문 바로가기
소프트웨어 마에스트로/개발

[개발관련] lexorank 적용기 3

by alpakaka 2024. 7. 24.

일단.. 만드는 일이 너무 품에 많이 들 것 같아 고민고민하던 어연 일주일..

일단 같은 분이 만들어놓으신 c# 버전 lexorank가 있길래 아.. 이걸 보면 되겠다.. 싶었지만 차마 만들 용기가 나지 않았다..

그러다가 소마에서 만나신 분의 조언을 듣게되는데..

오 c#이면 python 이랑 연결해서 사용할 수 있지 않나요?

그걸 듣고 냅다 적용해봅니다

 

 

brew install --cask dotnet-sdk

brew install mono

 

일단 git 레포를 받아주었습니다.

그리고 dll 파일로 만들어줄겁니다.

일단 받은 깃 레포 파일에 사용할 폴더로 들어갑니다..

dotnet build라는 명령어로 만들어줍니다

그러면 요 링크에 생겼다는 링크를 주는데 이걸 사용할 폴더로 옮겨줍니다 (mv 파일 옮길장소)

 

그리고 python 을 작성해줍니다

 

import clr
import os
from pythonnet import set_runtime
from pathlib import Path
from django.http import JsonResponse

# .NET 런타임 경로 설정
dotnet_root = Path("/usr/local/share/dotnet")
set_runtime(dotnet_root / "dotnet")

# C# DLL 파일 경로 설정
dll_path = Path(__file__).resolve().parent.parent / 'LexoRank.dll'
clr.AddReference(str(dll_path))

from LexoRank import LexoRank

def test_lexorank(request):
    lexorank = LexoRank()
    rank1 = lexorank.middle()
    rank2 = lexorank.next(rank1)
    
    return JsonResponse({
        'rank1': str(rank1),
        'rank2': str(rank2),
    })

이렇게 작성했더니

RuntimeError: The runtime <clr_loader.mono.Mono object at 0x10315f8f0> has already been loaded

이런 에러가 뜨길래 위에 .Net 런타임 경로 설정을 삭제했다

 

그리고 나서 또 에러가 뜨는게

ModuleNotFoundError: No module named 'LexoRank' 

이런 에러가 떠서 확인해보니..

 

# .NET 네임스페이스 및 클래스 로드

from LexoRankNamespace import LexoRank

이런식으로 작성하라고 해서 찾아서 실행했더니 되었다!

 

import clr
import os
from pathlib import Path
from django.http import JsonResponse

# 현재 파일(test.py)의 디렉토리 경로를 기준으로 DLL 파일 경로 설정
dll_path = Path(__file__).resolve().parent / 'LexoRank.dll'

# clr 모듈을 사용하여 .NET DLL 파일을 로드
clr.AddReference(str(dll_path))

# .NET 네임스페이스 및 클래스 로드
from LexoAlgorithm import LexoRank

def test_lexorank(request):
    rank1 = LexoRank.Middle()

    rank2 = rank1
    print(rank1.CompareTo(rank2))
   
    return ({
        'rank1': rank1.ToString(),
        'rank2': rank2.ToString(),
    })
    

print(test_lexorank(None))

 

일단 완성된 친구

밑에 이것저것 추가하고 실험하느라 위의 코드와는 출력물이 좀 다르다

 

쨋든 성공했으니.. django 에 넣어서 실험해본다..!