Naver Korean Dictionary/English Dictionary Search Tool Betriebsmethode und Quellcode
Die Funktionsweise und der Quellcode des Suchwerkzeugs Naver Korean Dictionary/English Dictionary werden erläutert.
Dies ist eine Fortsetzung des vorherigen Artikels.
Überblick über das Naver Korean Dictionary/English Dictionary Search Tool
1. Funktionsweise und Vorsichtsmaßnahmen des Naver Korean Dictionary/English Dictionary Search Tools
Ein Benutzer stellt unter Verwendung eines Webbrowsers eine Suchanforderung an den Naver-Dienst, und der Naver-Server antwortet mit einem Verarbeitungsergebnis für die Anforderung.
(Weitere Informationen zur Funktionsweise des Webs finden Sie im folgenden Artikel zu den Google-Suchergebnissen.)
https://www.google.co.kr/search?q=web+action+method
Schauen wir uns die Suchanfrage und Antwort des Wörterbuchdienstes von Naver genauer an.
1.1. Naver-Wörterbuchsuchanfrage und -antwort
Es gibt mehrere Möglichkeiten, die mit dem Server ausgetauschten Inhalte über einen Webbrowser zu überprüfen, und hier wird die Verwendung von Fiddler Web Debugger erläutert.
Das Folgende ist das Ergebnis der Überprüfung des Anforderungs- und Antwortinhalts in Fiddler bei der Suche nach dem Wort „registrieren“ im Koreanisch-Wörterbuch von Naver.
- URL, Inhaltstyp: Sie können den Inhalt unten überprüfen.
- Protokoll: HTTPS
- Host: de.dict.naver.com
- URL: /api3/koko/search?query=%EA%B0%80%EC%9E%85&m=pc&hid=162470754628591300
- 여기에서 “%EA%B0%80%EC%9E%85″는 “가입”이 URL Encoding된 문자열이다.
- Kopfzeile anfordern
- User-Agent, Cookie, etc. können überprüft werden.
- Inhalt der Antwort
- Inhaltstyp: application/json;charset=UTF-8
- Sie können sehen, dass die Antwortinhalte im json-Format vorliegen und der Zeichensatz in UTF-8 codiert ist.
- Inhaltslänge: 50814
- Es ist ersichtlich, dass der Inhalt der Antwort 50.814 Bytes beträgt, ungefähr 50 KB.
- Content-Body: {“searchResultMap“:{“searchResultListMap“:{“WORD“:{“query“:“Join“, …
- Es ist eine JSON-Zeichenfolge, und wenn Sie sie auf der Registerkarte „JSON“ überprüfen, hat sie eine hierarchische Struktur wie folgt.
- Inhaltstyp: application/json;charset=UTF-8
1.2. Ändern Sie das Antwortergebnisformat (HTML -> JSON)
Dieses Tool verwendet keine Naver Open API, sondern Web-Request- und -Response-Methoden.
Obwohl nicht genau, hat sich das Format der Antwortergebnisse im Dezember 2018 geändert. Davor war es im HTML-Format, aber als ich es zu diesem Zeitpunkt versehentlich mit Fiddler überprüfte, stellte ich fest, dass die Antwort in das JSON-Format geändert wurde.
Die erste Version dieses Tools wurde erstellt, als die Antwort im HTML-Format war. Ich habe die notwendigen Elemente aus HTML extrahiert, aber wann immer Naver die HTML-Struktur geändert hat, hat es nicht richtig funktioniert, sodass ich jedes Mal den Quellcode ändern musste, um ihn an die geänderte HTML-Struktur anzupassen. Da das Antwortergebnisformat in JSON geändert wurde, funktioniert es gut, ohne den Quellcode zu ändern.
1.3. Vorsichtsmaßnahmen für die Verwendung
Ob Naver offiziell angekündigt hat, Wörterbuch-Suchergebnisse im JSON-Format bereitzustellen, kann nicht bestätigt werden. Die Dokumentation der Struktur von JSON scheint ebenfalls unveröffentlicht zu sein.
(Wenn es Neuigkeiten oder Daten gibt, die veröffentlicht wurden, teilen Sie uns dies bitte in den Kommentaren mit.)
Aus diesem Grund kann es eines Tages plötzlich nicht mehr funktionieren, seien Sie also bitte vorsichtig.
2. Umsetzung
2.1. Zusammenfassung des Gesamtflusses
URL-kodieren Sie das zu suchende Wort und führen Sie die GetDataFromURL-Funktion aus, um das abgerufene JSON-Suchergebnis zu parsen und die erforderlichen Elemente zu extrahieren.
Dim aWord As String, sBaseURL As String, sWord As String
aWord = "가입"
sBaseURL = "https://ko.dict.naver.com/api3/koko/search?query=%s" '기본 URL
sWord = URLEncodeUTF8(aWord) '검색어 URL Encoding
Dim sURL As String, sURLData As String, oParsedDic As Dictionary
sURL = Replace(sBaseURL, "%s", sWord) '기본 URL에 검색어 대입
sURLData = GetDataFromURL(sURL, "GET", "", "utf-8") 'URL에서 결과 가져오기
Set oParsedDic = JsonConverter.ParseJson(sURLData) 'JSON결과를 Dictionary로 변환
'JSON이 변환된 Dictionary에서 검색결과에 해당하는 항목 추출
'시작 Path: oParsedDic("searchResultMap")("searchResultListMap")("WORD")("items")
Werfen wir einen Blick auf die wichtigsten Funktionen.
2.2. URL-Kodierung (URLEncodeUTF8-Quellcode)
Gibt die Suchanforderungs-URL als URLEncoded-String zurück. Die ADODB.Stream-Klasse wird verwendet.
Public Function URLEncodeUTF8( _
StringVal As String, _
Optional SpaceAsPlus As Boolean = False _
) As String
Dim bytes() As Byte, b As Byte, i As Integer, space As String
If SpaceAsPlus Then space = "+" Else space = "%20"
If Len(StringVal) > 0 Then
With New ADODB.Stream
.Mode = adModeReadWrite
.Type = adTypeText
.CharSet = "UTF-8"
.Open
.WriteText StringVal
.Position = 0
.Type = adTypeBinary
.Position = 3 ' skip BOM
bytes = .Read
End With
ReDim Result(UBound(bytes)) As String
For i = UBound(bytes) To 0 Step -1
b = bytes(i)
Select Case b
Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
Result(i) = Chr(b)
Case 32
Result(i) = space
Case 0 To 15
Result(i) = "%0" & Hex(b)
Case Else
Result(i) = "%" & Hex(b)
End Select
Next i
URLEncodeUTF8 = Join(Result, "")
End If
End Function
Um die ADODB-Bibliothek zu verwenden, muss auf „Microsoft ActiveX Data Object 6.1 Library“ verwiesen werden. auf dem Excel-Bildschirm Alt + F11 Drücken Sie einfach die Taste und wechseln Sie zum VBA-Editor, um es hinzuzufügen.
2.3. Request & Get Response (Quellcode der GetDataFromURL-Funktion)
Verwenden Sie die Klasse „WinHttp.WinHttpRequest“, um den Anforderungsheader und die Optionsinformationen festzulegen, die Such-URL zu besuchen und das Ergebnis zu erhalten. Da es sich um eine späte Bindungsmethode handelt, die Objekte mit CreateObject erstellt, muss kein Bibliotheksverweis hinzugefügt werden.
Function GetDataFromURL(strURL, strMethod, strPostData, Optional strCharSet = "UTF-8")
Dim lngTimeout
Dim strUserAgentString
Dim intSslErrorIgnoreFlags
Dim blnEnableRedirects
Dim blnEnableHttpsToHttpRedirects
Dim strHostOverride
Dim strLogin
Dim strPassword
Dim strResponseText
Dim objWinHttp
lngTimeout = 59000
strUserAgentString = "http_requester/0.1"
intSslErrorIgnoreFlags = 13056 ' 13056: ignore all err, 0: accept no err
blnEnableRedirects = True
blnEnableHttpsToHttpRedirects = True
strHostOverride = ""
strLogin = ""
strPassword = ""
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
'--------------------------------------------------------------------
'objWinHttp.SetProxy 2, "xxx.xxx.xxx.xxx:xxxx", "" 'Proxy를 사용하는 환경에서 설정
'--------------------------------------------------------------------
objWinHttp.SetTimeouts lngTimeout, lngTimeout, lngTimeout, lngTimeout
objWinHttp.Open strMethod, strURL
If strMethod = "POST" Then
objWinHttp.SetRequestHeader "Content-type", "application/x-www-form-urlencoded; charset=UTF-8"
Else
objWinHttp.SetRequestHeader "Content-type", "text/html; charset=euc-kr"
End If
If strHostOverride <> "" Then
objWinHttp.SetRequestHeader "Host", strHostOverride
End If
objWinHttp.Option(0) = strUserAgentString
objWinHttp.Option(4) = intSslErrorIgnoreFlags
objWinHttp.Option(6) = blnEnableRedirects
objWinHttp.Option(12) = blnEnableHttpsToHttpRedirects
If (strLogin <> "") And (strPassword <> "") Then
objWinHttp.SetCredentials strLogin, strPassword, 0
End If
On Error Resume Next
objWinHttp.Send (strPostData)
objWinHttp.WaitForResponse
If Err.Number = 0 Then
If objWinHttp.Status = "200" Then
'GetDataFromURL = objWinHttp.ResponseText
GetDataFromURL = BinaryToText(objWinHttp.ResponseBody, strCharSet)
Else
GetDataFromURL = "HTTP " & objWinHttp.Status & " " & _
objWinHttp.StatusText
End If
Else
GetDataFromURL = "Error " & Err.Number & " " & Err.Source & " " & _
Err.Description
End If
On Error GoTo 0
Set objWinHttp = Nothing
End Function
2.4. Antwort (Suchergebnis) JSON-String
Die JSON-Zeichenfolge Response (Suchergebnis) enthält ziemlich viele Informationen. Es ist schwer zu erkennen, da es keine Einrückung und keine Zeilentrennung gibt. (Teilauszüge)
{ "searchResultMap": { "searchResultListMap": { "WORD": { "query": "Join", "queryRevert": "", "items": [ { "rank": "1", "gdid": " 8800000f_4002c436c93d4bb38d3e58632fe00af0", "matchType": "exact:entry", "entryId": "4002c436c93d4bb38d3e58632fe00af0", "serviceCode": "1", "languageCode": "KOKO", "expTypeDictTypeForm": "word", "dict 2", "sourceDictnameKO": "Koreanisches Standardwörterbuch", "sourceDictnameOri": "Koreanisches Standardwörterbuch", "sourceDictnameLink": "https://stdict.korean.go.kr/main/main.do", .. ."expEntry ": "<strong>beitreten</strong>", ... "destinationLink": "#/entry/koko/4002c436c93d4bb38d3e58632fe00af0", ... "meansCollector": [ { "partOfSpeech": "Substantiv", "partOfSpeech2": "Substantiv", "bedeutet": [ { "order": "1", "value": "Beantragung eines Produkts, um einer Organisation oder Organisation beizutreten oder eine Dienstleistung zu erbringen.", ... "exampleOri": "<strong>beitreten</strong> Antragsformular.", ... }, { "order": "2", "value": "Neu eingefügt.", ... "exampleOri": "Etwaige Korrekturen in der Mitte des Manuskripts <strong>beitreten</strong>wurde gefunden.", ... }, { "order": "3", "value": "An den Vertrag gebundene Rechtsakte ohne Beglaubigung des Textes. Rechtsgemeinschaft, indem es Parteien erlaubt wird, Parteien nur durch Absichtserklärung zu werden...", ... "languageGroup": "Law", ... "exampleTrans": null, ... } ] } ], "similarWordList": [] , "antonymWordList": [ { "antonymWordName": "Verlassen", "antonymWordLink": "#/entry/koko/14e89175152b46569c2a2b6360e835ad" } ], "expAliasEntryAlwaysList": [], "expAliasGeneralAlwaysList": [ { "originLanguageValue": "加入" } ], ... }, { "rank": "2", "gdid": "881857e6_e12c4e3432cf458c929bd49c929fd80b", "matchType": "exact:entry", "entryId": "e12c4e3432cf458c929bd49c929fd80b", "serviceCode": „1“, „languageCode“: „KOKO“, „expDictTypeForm“: „Wort“, „dictTypeForm“: „2“, „sourceDictnameKO“: „Urimalsaem“, „sourceDictnameOri“: „Urimalsaem“, „sourceDictnameLink“: „https : //opendict.korean.go.kr/main", ... "expEntry": "<strong>beitreten</strong>", ... "destinationLink": "#/entry/koko/e12c4e3432cf458c929bd49c929fd80b", ... "meansCollector": [ { "partOfSpeech": "Substantiv", "partOfSpeech2": "Substantiv", "bedeutet": [ { "order": "", "value": "Das Hinzufügen eines neuen Individuums zu einer Population. Allerdings kommen nur Objekte in Frage, die einen bestimmten Entwicklungsstand erreicht haben.", ... } ] } ], "similarWordList": [], "antonymWordList": [], ... }, ], "total": 96, "sectionType": "WORD", "revert": "", "orKEquery": null } } } }
2.5. JSON-Parser
Sie können das gewünschte Element mithilfe von Zeichenfolgenfunktionen (MID, INSTR usw.) aus dem JSON-String extrahieren, aber die Suche ist kompliziert und der Code wird sehr unordentlich.
Wenn es in Python implementiert ist, importieren Sie einfach das json-Modul und verwenden Sie die json-Klasse. Es gibt nicht viele offene Bibliotheken für VBA, aber glücklicherweise gibt es einen JSON-Parser, der auf Github veröffentlicht ist, also habe ich ihn gut genutzt.
https://github.com/VBA-tools/VBA-JSON
Der Quellcode dieses JSON-Parsers ist 1.123 Zeilen lang, wird also nicht im Blog gepostet. Wenn Sie es brauchen, überprüfen Sie bitte den Quellcode unter der obigen URL. Ein einfaches Beispiel für die Verwendung des JSON-Parsers lautet wie folgt (Code auf Github oben veröffentlicht):
Dim Json As Object
Set Json = JsonConverter.ParseJson("{""a"":123,""b"":[1,2,3,4],""c"":{""d"":456}}")
' Json("a") -> 123
' Json("b")(2) -> 2
' Json("c")("d") -> 456
Json("c")("e") = 789
Debug.Print JsonConverter.ConvertToJson(Json)
' -> "{"a":123,"b":[1,2,3,4],"c":{"d":456,"e":789}}"
Debug.Print JsonConverter.ConvertToJson(Json, Whitespace:=2)
' -> "{
' "a": 123,
' "b": [
' 1,
' 2,
' 3,
' 4
' ],
' "c": {
' "d": 456,
' "e": 789
' }
' }"
2.6. Klickereignis-Quellcode der Suchschaltfläche
Dieser Code wird ausgeführt, wenn auf der Seite „Wörterbuchsuche“ auf die Schaltfläche „Naver Wörterbuchsuche“ geklickt wird. Folgendes ist implementiert:
- Überprüfen Sie, ob die Optionen richtig eingestellt sind.
- Für einen Suchbegriff wird wiederholt eine Wörterbuchsuche durchgeführt und das Ergebnis in einem Blatt angezeigt.
- Die angezeigten Ergebnisse sind matchType, Sucheintrag, Bedeutung, Link, Synonym und Antonym.
- Wird während der Ausführung die Schaltfläche „Stop Search“ gedrückt, stoppt die Wiederholung.
Private Sub cmdRunDicSearch_Click()
Range("A1").Select
DoEvents
Dim bIsKorDicSearch As Boolean, bIsEngDicSearch As Boolean, sTargetDic As String
bIsKorDicSearch = chkKorDic.Value: bIsEngDicSearch = chkEngDic.Value
If (Not bIsKorDicSearch) And (Not bIsEngDicSearch) Then
MsgBox "검색 대상 사전중 적어도 1개는 선택해야 합니다", vbExclamation + vbOKOnly, "검색 대상 사전 확인"
Exit Sub
End If
Dim bIsMatchTypeExact As Boolean, bIsMatchTypeTermOr As Boolean, bIsMatchTypeAllTerm As Boolean '검색결과 표시 설정
bIsMatchTypeExact = chkMatchTypeExact.Value: bIsMatchTypeTermOr = chkMatchTypeTermOr.Value: bIsMatchTypeAllTerm = chkMatchTypeAllTerm.Value
If (bIsMatchTypeExact Or bIsMatchTypeTermOr Or bIsMatchTypeAllTerm) = False Then
MsgBox "검색결과 표시 설정중 적어도 하나는 선택해야 합니다.", vbExclamation + vbOKOnly, "확인"
Exit Sub
End If
If bIsKorDicSearch And Not bIsEngDicSearch Then sTargetDic = "국어사전"
If Not bIsKorDicSearch And bIsEngDicSearch Then sTargetDic = "영어사전"
If bIsKorDicSearch And bIsEngDicSearch Then sTargetDic = "국어사전, 영어사전"
Dim lMaxResultCount As Long
lMaxResultCount = CInt(txtMaxResultCount.Value)
If MsgBox("사전 검색을 시작하시겠습니까?" + vbLf + _
"대상 사전: " + sTargetDic + vbLf + _
"결과출력 제한개수: " + CStr(lMaxResultCount) _
, vbQuestion + vbYesNoCancel, "확인") <> vbYes Then Exit Sub
Dim i As Long, iResultOffset As Long
bIsWantToStop = False
DoEvents
Dim sWord As String, oKorDicSearchResult As TDicSearchResult, oEngDicSearchResult As TDicSearchResult
Dim oBaseRange As Range
Set oBaseRange = Range("검색결과Header").Offset(1, 0)
oBaseRange.Select
For i = 0 To 100000
If bIsWantToStop Then
MsgBox "사용자의 요청으로 검색을 중단합니다.", vbInformation + vbOKOnly, "확인"
Exit For
End If
If chkSkipIfResultExists.Value = True And _
oBaseRange.Offset(i, 1) <> "" Then GoTo Continue_For '이미 내용이 있으면 Skip
sWord = oBaseRange.Offset(i)
If sWord = "" Then Exit For
oBaseRange.Offset(i).Select
Application.ScreenUpdating = False
If bIsKorDicSearch Then '국어사전 검색결과 표시
oKorDicSearchResult = DoDicSearch(dtsKorean, sWord, bIsMatchTypeExact, bIsMatchTypeTermOr, bIsMatchTypeAllTerm, lMaxResultCount)
oBaseRange.Offset(i, 1).Select
With oKorDicSearchResult
oBaseRange.Offset(i, 1) = .sMatchType
oBaseRange.Offset(i, 2) = .sSearchEntry
oBaseRange.Offset(i, 3) = .sMeaning
If oKorDicSearchResult.sLinkURL <> "" Then
With ActiveSheet.Hyperlinks.Add(Anchor:=oBaseRange.Offset(i, 4), Address:=.sLinkURL, TextToDisplay:="네이버국어사전 열기: " & .sLinkWord)
.Range.Font.Size = 8
End With
End If
oBaseRange.Offset(i, 5) = .sSynonymList
oBaseRange.Offset(i, 6) = .sAntonymList
End With
End If
If bIsEngDicSearch Then '영어사전 검색결과 표시
oEngDicSearchResult = DoDicSearch(dtsEnglish, sWord, bIsMatchTypeExact, bIsMatchTypeTermOr, bIsMatchTypeAllTerm, lMaxResultCount)
'oBaseRange.Offset(i, 7).Select
With oEngDicSearchResult
oBaseRange.Offset(i, 7) = .sMatchType
oBaseRange.Offset(i, 8) = .sSearchEntry
oBaseRange.Offset(i, 9) = .sMeaning
If oKorDicSearchResult.sLinkURL <> "" Then
With ActiveSheet.Hyperlinks.Add(Anchor:=oBaseRange.Offset(i, 10), Address:=.sLinkURL, TextToDisplay:="네이버영어사전 열기: " & .sLinkWord)
.Range.Font.Size = 8
End With
End If
oBaseRange.Offset(i, 11) = .sSynonymList
oBaseRange.Offset(i, 12) = .sAntonymList
End With
End If
Application.ScreenUpdating = True
Continue_For:
DoEvents
Next i
MsgBox "사전 검색을 완료하였습니다", vbOKOnly + vbInformation
End Sub
2.7. Wörterbuchsuche (DoDicSearch-Quellcode)
Diese Funktion sendet eine Suchanfrage für ein Suchwort, empfängt das Ergebnis, extrahiert das erforderliche Element und gibt es zurück.
- Parsen einer JSON-Zeichenfolge in ein Wörterbuch: Zeile 49
- MatchType, Sucheintrag, Bedeutung, Link, Synonym, Antonymeintrag extrahieren: Zeilen 53 bis 106
Const DICT_ROOT_URL_KO As String = "https://ko.dict.naver.com/"
Const DICT_BASE_URL_KO As String = "https://ko.dict.naver.com/api3/koko/search?query=%s"
Const DICT_ROOT_URL_EN As String = "https://en.dict.naver.com/"
Const DICT_BASE_URL_EN As String = "https://en.dict.naver.com/api3/enko/search?query=%s"
Public Enum DicToSearch
dtsKorean = 1
dtsEnglish = 2
dtsAll = 10
End Enum
Public Type TDicSearchResult
sWord As String
sMatchType As String
sSearchEntry As String
sMeaning As String
sLinkURL As String
sLinkWord As String
sSynonymList As String
sAntonymList As String
End Type
Public Function DoDicSearch(aDicToSearch As DicToSearch, aWord As String, _
bIsMatchTypeExact As Boolean, bIsMatchTypeTermOr As Boolean, bIsMatchTypeAllTerm As Boolean, _
aMaxResultCount As Long) As TDicSearchResult
Dim sDicRootURL As String, sBaseURL As String, sURL As String, sURLData As String, sWord As String, oDicSearchResult As TDicSearchResult
Dim oParsedDic As Dictionary
Dim oItem As Dictionary, oMeansCollector As Dictionary, oMeans As Dictionary
Dim oSimWords As Dictionary, oAntWord As Dictionary
Dim sPOS As String, sMeaning As String, sLinkURL As String, sLinkWord As String
Dim s유의어 As String, s유의어목록 As String, s반의어 As String, s반의어목록 As String
Dim sMatchType As String, sSearchEntry As String, sHandleEntry As String
Select Case aDicToSearch
Case dtsKorean
sDicRootURL = DICT_ROOT_URL_KO
sBaseURL = DICT_BASE_URL_KO
Case dtsEnglish
sDicRootURL = DICT_ROOT_URL_EN
sBaseURL = DICT_BASE_URL_EN
End Select
If aWord = "" Then Exit Function
sWord = URLEncodeUTF8(aWord)
sURL = Replace(sBaseURL, "%s", sWord)
sURLData = GetDataFromURL(sURL, "GET", "", "utf-8") 'URL에서 결과 가져오기
Set oParsedDic = JsonConverter.ParseJson(sURLData) 'JSON결과를 Dictionary로 변환
Dim lMatchIdx As Long: lMatchIdx = 0
Dim lResultCount As Long: lResultCount = 0
For Each oItem In oParsedDic("searchResultMap")("searchResultListMap")("WORD")("items")
lResultCount = lResultCount + 1
If (aMaxResultCount <> 0) And (lResultCount > aMaxResultCount) Then Exit For '결과출력 제한개수 초과시 Loop 종료
s유의어 = "": s반의어 = ""
lMatchIdx = lMatchIdx + 1
'If oItem("matchType") <> "exact:entry" Then Exit For
sHandleEntry = oItem("handleEntry")
Select Case oItem("matchType")
Case "exact:entry"
sLinkWord = sHandleEntry
sLinkURL = sDicRootURL + oItem("destinationLink")
If Not bIsMatchTypeExact Then GoTo Continue_InnerFor
Case "term:or"
If Not bIsMatchTypeTermOr Then GoTo Continue_InnerFor
Case "allterm:proximity:1.000000"
If Not bIsMatchTypeAllTerm Then GoTo Continue_InnerFor
Case Else
End Select
sMatchType = sMatchType + IIf(sMatchType = "", "", vbLf) & CStr(lMatchIdx) & ". " & oItem("matchType")
sSearchEntry = sSearchEntry + IIf(sSearchEntry = "", "", vbLf) & CStr(lMatchIdx) & ". " & sHandleEntry
For Each oMeansCollector In oItem("meansCollector")
'Debug.Print "품사: " & oMeansCollector("partOfSpeech")
sPOS = ""
If oMeansCollector.Exists("partOfSpeech") Then
If Not IsNull(oMeansCollector("partOfSpeech")) Then sPOS = oMeansCollector("partOfSpeech")
End If
For Each oMeans In oMeansCollector("means")
'Debug.Print "뜻: " & oMeans("value")
If oMeans.Exists("value") Then
If Not IsNull(oMeans("value")) Then _
sMeaning = sMeaning + IIf(sMeaning = "", "", vbLf) & CStr(lMatchIdx) & ". " & IIf(sPOS = "", "", "[" & sPOS & "] ") & RemoveHTML(oMeans("value"))
End If
Next oMeans
Next oMeansCollector
For Each oSimWords In oItem("similarWordList")
If oSimWords.Exists("similarWordName") Then _
s유의어 = s유의어 + IIf(s유의어 = "", "", ", ") & RemoveHTML(oSimWords("similarWordName"))
Next oSimWords
If s유의어 <> "" Then _
s유의어목록 = s유의어목록 & IIf(s유의어목록 = "", "", vbLf) & CStr(lMatchIdx) & ". " & sHandleEntry & ": " & s유의어
For Each oAntWord In oItem("antonymWordList")
If oAntWord.Exists("antonymWordName") Then _
s반의어 = s반의어 + IIf(s반의어 = "", "", ", ") & RemoveHTML(oAntWord("antonymWordName"))
Next oAntWord
If s반의어 <> "" Then _
s반의어목록 = s반의어목록 & IIf(s반의어목록 = "", "", vbLf) & CStr(lMatchIdx) & ". " & sHandleEntry & ": " & s반의어
Continue_InnerFor:
Next oItem
If sMeaning = "" Then
sMeaning = "#NOT FOUND#": sMatchType = sMeaning: sSearchEntry = sMeaning
End If
'결과값 반환
With oDicSearchResult
.sWord = aWord
.sMatchType = sMatchType
.sSearchEntry = sSearchEntry
.sMeaning = sMeaning
.sLinkWord = sLinkWord
.sLinkURL = Replace(sLinkURL, "#", "%23") 'Excel에서 #기호를 내부적으로 #20 - #20 으로 치환하는 것을 방지
.sSynonymList = s유의어목록
.sAntonymList = s반의어목록
End With
DoDicSearch = oDicSearchResult
End Function
Oben haben wir uns die Betriebsmethode, Vorsichtsmaßnahmen und den Quellcode dieses Tools angesehen. Bitte hinterlassen Sie Kommentare von denen, die das Tool, Fragen und notwendige Funktionen verwendet haben.
<< Liste verwandter Artikel >>







Da stimme ich dir voll und ganz zu. Es ist eine ausgezeichnete Idee. Ich unterstütze dich.
_ _ _ _ _ _ _ _ _ _ _ _ _ _
Nekultsy Ivan dxvk github
Vielen Dank.
Bitte werfen Sie einen Blick auf andere Artikel in meinem Blog ^^