[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mhc:02130] Re: [ 現象報告 & 質問 ] guess date



森下と申します。

From: NOGUCHI Yusuke <nogunogu@xxxxxxxxxxxxxxxxx>
Subject: [mhc:02129] Re: [ 現象報告 & 質問 ] guess date
Date: Tue, 17 May 2005 17:37:28 +0900 (JST)
Message-ID: <20050517.173728.08243104.nogunogu@xxxxxxxxxxxxxxxxx>

> > mhc-guess-date-regexp-list 中の throw を取ると,
> > 最後まで候補になると思います.
> > throw を挿入した所以前の regexp にマッチした場合は,
> > 以降の regexp を使いません.
> 
> アドバイス通り、2カ所の throw をコメントアウトしたところ、「18日」が選
> 択候補になりました。

または、.emacs なりで、

(setq mhc-guess-ignore-english-date t)

としてしまう手もありますね。この場合には、英語日付は候補の対象になりま
せん。

> > throw を入れた部分の前後に日付けとしての確からしさの落差があると
> > 考えて,ゴミを集めないような配慮からそうしています.
> > 外すと,うっとうしい場面もあると思います.
> > 自分のスタイルに合わせて実験してみてください.
> 
> 私個人の好みでいうと、過剰にヒットする方が楽ですね。
> "C-n/C-p" で移動する分にはそれほど苦にはなりませんが、yyyy/mm/dd を入
> 力するのはメンドな性質です...

英語も日本語も候補に挙げたいという要望は、それなりにあると思います。
日英混合文が送られてくること(たとえば英語の国際会議の案内が日本語のコ
メント付きで転送されてくるなど)を考えると、日本語と英語とでは、双方独
立にマッチ対象とできる方が良いように思えてきました。
つまり、日本語と英語で throw の位置を共有せずに、変数を分けてしまった
方が良いということです。

そこで、添付のパッチを書いてみました。
これを当てると、

> > 添付の "Subject: sample mail 1" をスケジュール登録しようとすると、date の
> > guess の際、引用メールの情報である
> > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> > > Sent: Monday, May 16, 2005 7:04 PM
> > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> > の「May 16, 2005」*のみ* が検出され、本来検出してもらいたい「18日」が
> > 検出されません。
> > C-n/C-p でも候補移動できないようです。

C-n/C-p で、「18日」と「May 16, 2005」とで行ったり来たりするようになる
と思います。よろしければ試してみてください。

--
もりした みんぺい
Index: mhc-guess.el
===================================================================
RCS file: /cvsroot/mhc/emacs/mhc-guess.el,v
retrieving revision 1.23
diff -c -r1.23 mhc-guess.el
*** mhc-guess.el	24 Apr 2005 05:32:35 -0000	1.23
--- mhc-guess.el	17 May 2005 09:36:11 -0000
***************
*** 107,113 ****
  	      "\\)?")
       mhc-guess/make-date-from-mmdd 2 3 8 9 10)
  
!     ;; USA style date format
      (,(concat "\\(Jan\\(uary\\)?\\|Feb\\(ruary\\)?\\|Mar\\(ch\\)?\\|"
  	      "Apr\\(il\\)?\\|May\\|June?\\|July?\\|Aug\\(ust\\)?\\|"
  	      "Sep\\(tember\\)?\\|Oct\\(ober\\)?\\|"
--- 107,135 ----
  	      "\\)?")
       mhc-guess/make-date-from-mmdd 2 3 8 9 10)
  
!     throw
! 
!     (,(concat "\\(今度\\|[今来次]週\\|再来週\\)[\n  ]*の?[\n  ]*"
! 	     "\\([月火水木金土日]\\)曜")
!      mhc-guess/make-date-from-relative-week 1 2)
! 
!     throw
! 
!     ("\\([0-90-9]+\\)[\n  ]*日"
!      mhc-guess/make-date-from-mmdd nil 1)
! 
!     ("\\([0-90-9]+\\)[  ]*[((][月火水木金土日]"
!      mhc-guess/make-date-from-mmdd nil 1)
! 
!     ("[^\((]\\([月火水木金土日]\\)\n?曜"
!      mhc-guess/make-date-from-relative-week nil 1)
! 
!     ("\\(本日\\|今日\\|あす\\|あした\\|あさって\\|明日\\|明後日\\)"
!      mhc-guess/make-date-from-relative-day 1)
!     ))
! 
! (defvar mhc-guess-date-english-regexp-list
!   `(
      (,(concat "\\(Jan\\(uary\\)?\\|Feb\\(ruary\\)?\\|Mar\\(ch\\)?\\|"
  	      "Apr\\(il\\)?\\|May\\|June?\\|July?\\|Aug\\(ust\\)?\\|"
  	      "Sep\\(tember\\)?\\|Oct\\(ober\\)?\\|"
***************
*** 117,123 ****
  	      "\\(\\('\\|[1-9][0-9]\\)?[0-9][0-9]\\)?") ;; year
       mhc-guess/make-date-from-usa-style-date 1 11 13)
  
-     ;; British style date format
      (,(concat "\\([0-9][0-9]?\\)\\(st\\|nd\\rd\\|th\\)?,? " ;; day
  	      "\\(Jan\\(uary\\)?\\|Feb\\(ruary\\)?\\|Mar\\(ch\\)?\\|"
  	      "Apr\\(il\\)?\\|May\\|June?\\|July?\\|Aug\\(ust\\)?\\|"
--- 139,144 ----
***************
*** 129,138 ****
  
      throw
  
-     (,(concat "\\(今度\\|[今来次]週\\|再来週\\)[\n  ]*の?[\n  ]*"
- 	     "\\([月火水木金土日]\\)曜")
-      mhc-guess/make-date-from-relative-week 1 2)
- 
      (,(concat "\\([Tt]his\\|[Nn]ext\\)[\n ]+"
                "\\(Monday\\|Tuesday\\|Wednesday\\|Thursday\\|Friday\\|"
  	      "Saturday\\|Sunday\\)")
--- 150,155 ----
***************
*** 145,166 ****
  
      throw
  
-     ("\\([0-90-9]+\\)[\n  ]*日"
-      mhc-guess/make-date-from-mmdd nil 1)
- 
-     ("\\([0-90-9]+\\)[  ]*[((][月火水木金土日]"
-      mhc-guess/make-date-from-mmdd nil 1)
- 
-     ("[^\((]\\([月火水木金土日]\\)\n?曜"
-      mhc-guess/make-date-from-relative-week nil 1)
- 
      (,(concat "\\(Monday\\|Tuesday\\|Wednesday\\|Thursday\\|Friday\\|"
  	      "Saturday\\|Sunday\\)")
       mhc-guess/make-date-from-english-relative-week 1 nil nil)
  
-     ("\\(本日\\|今日\\|あす\\|あした\\|あさって\\|明日\\|明後日\\)"
-      mhc-guess/make-date-from-relative-day 1)
- 
      (,(concat "\\([Tt]oday\\|[Tt]omorrow\\|"
  	      "[Tt]he[ \n]+[Dd]ay[ \n]+[Aa]fter[ \n]+[Tt]omorrow\\)")
       mhc-guess/make-date-from-english-relative-day 1)
--- 162,171 ----
***************
*** 249,258 ****
  (defun mhc-guess-date (&optional hint1)
    (let ((now (or (mhc-date-new-from-string3 (mhc-header-get-value "Date"))
  		 (mhc-date-now))))
!     (mhc-guess/guess mhc-guess-date-regexp-list hint1 now)))
  
  (defun mhc-guess-time (&optional hint1)
!   (mhc-guess/guess mhc-guess-time-regexp-list hint1))
  
  (defun mhc-guess-location-setup ()
    (if mhc-guess-location-list
--- 254,267 ----
  (defun mhc-guess-date (&optional hint1)
    (let ((now (or (mhc-date-new-from-string3 (mhc-header-get-value "Date"))
  		 (mhc-date-now))))
!     (mhc-guess/guess
!      (if mhc-guess-ignore-english-date
! 	 (list mhc-guess-date-regexp-list)
!        (list mhc-guess-date-regexp-list mhc-guess-date-english-regexp-list))
!      hint1 now)))
  
  (defun mhc-guess-time (&optional hint1)
!   (mhc-guess/guess (list mhc-guess-time-regexp-list) hint1))
  
  (defun mhc-guess-location-setup ()
    (if mhc-guess-location-list
***************
*** 268,274 ****
      (setq mhc-guess/location-regexp-list mhc-guess-location-regexp-list)))
    
  (defun mhc-guess-location (&optional hint1)
!   (mhc-guess/guess mhc-guess/location-regexp-list hint1))
  
  (defun mhc-guess/guess (control-regexp-lst &optional hint1 now)
    (let ((score-list
--- 277,283 ----
      (setq mhc-guess/location-regexp-list mhc-guess-location-regexp-list)))
    
  (defun mhc-guess-location (&optional hint1)
!   (mhc-guess/guess (list mhc-guess/location-regexp-list) hint1))
  
  (defun mhc-guess/guess (control-regexp-lst &optional hint1 now)
    (let ((score-list
***************
*** 288,307 ****
  ;;
  
  (defun mhc-guess/gather-candidate (control-regexp-lst &optional now)
!   (let ((ret nil) cand-lst)
      (while control-regexp-lst
!       (cond
!        ((listp (car control-regexp-lst))
!  	(if (setq cand-lst
!  		  (mhc-guess/gather-candidate2
!  		   (car (car control-regexp-lst))       ;; regexp
!  		   (car (cdr (car control-regexp-lst))) ;; convfunc
!  		   (cdr (cdr (car control-regexp-lst))) ;; posision list
!  		   now                          ;; current date
!  		   ))
!  	    (setq ret (nconc ret cand-lst))))
!        ((and (string= "throw" (symbol-name (car control-regexp-lst))) ret)
!  	(setq control-regexp-lst nil)))
        (setq control-regexp-lst (cdr control-regexp-lst)))
      ret))
  
--- 297,325 ----
  ;;
  
  (defun mhc-guess/gather-candidate (control-regexp-lst &optional now)
!   (let ((ret nil) ret-work cand-lst cr-lst)
      (while control-regexp-lst
!       (setq cr-lst (car control-regexp-lst))
!       (while cr-lst
! 	(cond
! 	 ((listp (car cr-lst))
! 	  (if (setq cand-lst
! 		    (mhc-guess/gather-candidate2
! 		     (car (car cr-lst))       ;; regexp
! 		     (car (cdr (car cr-lst))) ;; convfunc
! 		     (cdr (cdr (car cr-lst))) ;; posision list
! 		     now                          ;; current date
! 		   ))
! 	      (setq ret-work (nconc ret-work cand-lst))))
! 	 ((and (string= "throw" (symbol-name (car cr-lst))) ret-work)
! 	  (setq ret (nconc ret ret-work))
! 	  (setq ret-work nil)
! 	  (setq cr-lst nil)))
! 	(setq cr-lst (cdr cr-lst)))
!       (if ret-work
! 	  (progn
! 	    (setq ret (nconc ret ret-work))
! 	    (setq ret-work nil)))
        (setq control-regexp-lst (cdr control-regexp-lst)))
      ret))