>

누군가가 매일 이와 같은 메일을 보낸다고 상상해보십시오.

예 1 :

"My fuel consumption yesterday was XXX liters, My distance driven is YYY kilometers/miles, My average speed yesterday ZZZ kilometers/miles per hour "

예 2 :

"The engine used XXX liters of fuel yesterday, The car drove YYY kilometers yesterday (+3 kilometers after 12 o'clock, but this was technically today), The car's mean speed yesterday is ZZZ kilometers per hour"

메일에 더 많은 값, 최대 5 개의 값이있을 수 있습니다 (이 예에서는 3 개).

작업은 XXX,YYY and ZZZ 를 얻는 것입니다  메일에서 값이 많을수록 더 많은 값이 표시됩니다. 물론 메일은 수동으로 입력되므로 각 메일은 다른 종류입니다.

이것은 어떻게 하는가? 모든 (심각한) 아이디어는 환영합니다. 아래에 아이디어를 주겠습니다 :

Keras(또는 다른) 신경망이 그 일을 할 수도 있다고 생각했습니다. keras.preprocessing.text.one_hot() 를 사용하여 각 메일을 numpy 벡터로 표시하려고했습니다.  다음과 같은 구조로 신경망을 훈련시킵니다 :

  1. EmbeddingLayer
  2. 1DConvLayer with Relu activation
  3. MaxpoolLayer
  4. DropoutLayer
  5. FlattenLayer
  6. DenseLayer with Relu activation
  7. DropoutLayer
  8. Dense Layer with Linear activation

위 예제의 경우 각 뉴런이 값을 예측해야하는 3 개의 출력 뉴런이 있습니다. 예를 들어 첫 번째 출력 뉴런은 XXX, 두 번째 뉴런 YYY 등을 출력해야합니다.

Adam 최적화 프로그램과 MSE를 손실로 사용하면 이는 나쁜 일입니다. MSE는 다소 큰 가치로 수렴하는 것으로 보이며 예측은 완전히 벗어났습니다.

다른 구조를 사용해야합니까? 다음 중 가장 성공한 구조는 무엇입니까?

완전히 다른 출력을 사용해야합니까? 예를 들어, 신경망은 "6 번째 단어는 연료 소비"입니다.

Neural 네트워크없이 전혀 다른 접근법을 사용해야합니까? 그러면 어떻게 되나요?

신경망의 출력이있는 메시지의 예. 메일 메시지 :

- Cargo quantity, B/L mt: 0 
 - ME Fuel consumption mt: 8,9 
 - Total fuel consumption mt: 15
 - Draught m: 6,65
 - Date: 2018-07-04 07:00
 - Timezone: 2018-07-04 07:00 W. Europe Standard Time 
 - ROB MGO: 510,3
 - Distance, 127

신경망 출력 :

  • Date: 2018-09-12T15:02:28
  • Timezone: 545.405
  • ROB MGO: -1876.67
  • Cargo: 23714.6
  • Draught: 0.394458
  • Cargo offload: 9.97439e+06
  • Cargo load: 9.87113e+06

원하는 결과 :

  • Date: 2018-04-07T07:00:00
  • Timezone: +1
  • ROB MGO: 510.3
  • Cargo: 0
  • Draught: 6.65
  • Cargo offload: 99999999
  • Cargo load: 99999999

시간대는 UTC와의 차이를 나타냅니다.이 경우 +1,화물 오프로드 및화물로드가 메일에 존재하지 않으므로 "존재하지 않음"을 의미하는 99999999를 출력해야합니다. 날짜는 먼저 타임 스탬프로 변환되므로 신경망은 타임 스탬프를 출력합니다.

  • 답변 # 1

    다음 단계를 수행하면됩니다 :

    <올>

    "이름"및패턴"이라는 2 개의 열이있는 Excel 파일을 만듭니다. 여기서"이름 "은 캡처 그룹 (Draught/Cargo 오프로드)하고 "패턴"은 정규식을 가져 와서 캡처해야합니다.

    파이썬에서이 명령을 아래 명령으로 읽으십시오 :

    와이즈 비즈 와이즈 비즈

    를 전달
     정규 표현식의 Excel을 구문 분석 한 다음 구문 분석하는 데 도움이되는 아래 함수에 연결하십시오.

    와이즈 비즈 와이즈 비즈

    와이즈 비를 지나치다  그리고 import pandas as pd df = pd.read_excel('\\Regex.xlsx', sheet_name=0) 원하는 출력을 얻으려면 아래의 기능을 사용하여 이메일을 보내십시오.

    와이즈 비즈 와이즈 비즈

    df  캡처 그룹의 사전과 해당 값이됩니다. 메일에없는 값은 단순히 비어 있습니다. 당신은

    를 변환하는 간단한 논리를 작성할 수 있습니다
     등.

    Excel로 작성되는 샘플 정규식:

    와이즈 비즈 와이즈 비즈

    정규식 작업을 보려면 아래 링크를 참조하십시오. https://regex101.com/r/IppEq0/1

    이제 당신의 캡처 그룹을 위해 더 많은 정규 표현식을 작성하고 엑셀에 넣어야합니다

    def parse_patterns_regex(df): pattern = df['pattern'].tolist() pattern_name = df['name'].tolist() pattern_dict = dict(zip(pattern_name, pattern)) return pattern_dict

  • 이전 javascript - jquery를 사용하여 div 내부에서 ID를 얻는 방법
  • 다음 python - 클래스가 아닌 메타 클래스의 __repr__ 클래스